轉載於博主flash勝龍的文章,感謝博主的總結與分享。
原博客鏈接https://blog.csdn.net/u010770993/article/details/70312506
一、選取幾列組成新的dataframe:
df = df[['A列列名', 'S列列名', 'H列列名']]
二、選取某列'STATUS'里面元素為"ACTIVE"的行,即刪掉列STATUS元素不是ACTIVE的行
df = df[df['STATUS'] == "ACTIVE"]
(單項條件搜索,類似SELECT ALL WHERE df.STATUS = ACTIVE)
三、選取'BADTHING'列為元素空的行,即去掉BADTHING所在列中的空行所在行數據,組成一個新的dataframe
df = df[df['BADTHING'].isnull()]
(空值搜索)
四、選取GOODREASON列元素為列表['quality', 'cheap']內元素的行,即可用特定列表內容進行篩選
df = df[df['GOODREASON'].isin(['quality', 'cheap'])]
(多項條件搜索,類似SELECT ALL WHERE df.GOODREASON= quality AND cheap)
五、分組並進行遍歷,運用groupby和for:
groupByNew = df.groupby('CITY', sort=False)
for name, groupData in groupByNew:
# TODO …… ……
如代碼所示,我們可以對dataframe以某列'CITY'進行分組。我們如何取出某組的數據呢?當然是用
for循環。取出來的name即是組名,而groupData同樣是一個dataframe,可以進行更進一步操作。
六、對Series數據進行排序:
series= series.sort_values(ascending=False) # 進行從大到小排序
進階:關於groupby的一些信息:
在進行groupby運算后,直接打印會得一個object信息,添加groups參數后
print df.groupby(by=['CITY']).groups
打印出來會是帶group標簽和原數據行標簽(也就是原來dataframe里面對應行的index)的組合信息:
{'BEIJING': [25998L, 26134L, 26135L, 26235L, 26340L], 'SHANGHAI': [33370L, 33426L, 33541L], 'CHENGDU': [26153L]
我們可以看到,按照groups來print,得出city為北京的情況下,對應原來的行標簽第25998行、26134行等
即使指定了某列:
print df.groupby(by=['CITY'])['QUANTITY'].groups
依然會得出相同的結果:
{'BEIJING': [25998L, 26134L, 26135L, 26235L, 26340L], 'SHANGHAI': [33370L, 33426L, 33541L], 'CHENGDU': [26153L]
除非我們把每個分組的所有行都整理成一行,如用sum來求和:
print df.groupby(by=['CITY'])['QUANTITY'].sum()
這樣就可以成功轉換成dataframe了:
CITY
BEIJING 5
SHANGHAI 207
CHENGDU 518
……
匯總說明如下:
print '----------NEW------------\n', type(df.groupby(by=['CITY']))
print '----------NEW------------\n', type(df.groupby(by=['CITY']).sum())
print '----------NEW------------\n', type(df.groupby(by=['CITY'])['QUANTITY'])
print '----------NEW------------\n', type(df.groupby(by=['CITY'])['QUANTITY'].sum())
所得結果為:
----------NEW------------
----------NEW------------
----------NEW------------
----------NEW------------
說明:
一個dataframe經過groupby以后得到的類型是pandas.core.groupby.DataFrameGroupBy。而用for in循環取出的每個項的類型是pandas.core.frame.DataFrame
一個dataframe經過groupby再進行sum以后仍然是dataframe(不過具體通過那一列來sum有待考證)
一個dataframe經過groupby以后再進行列選取,得到的是pandas.core.groupby.SeriesGroupBy類型。可知用for in循環取出的是pandas.core.series.Series
一個series經過groupby再進行sum以后仍然是series