groupby机制
groupby:分割,應用和組合。groupby經常只需一行代碼,就可以計算每組的和,均值,計數,最小值以及其他累計值。它返回一個DataFrameGroupby對象,你可以將它看成是一個特殊的DataFrame對象,里面隱藏著若干組數據。
groupby的基本操作方法:
從創建DataFrame開始:
1、按列取值:Groupby對象按列取值,并返回一個修改過的Groupby對象。
df.groupby('key1')['data1'].sum()2、按組迭代:返回的每一組都是Series或FataFrame:
for k1, k2 in df.groupby(['key1', 'key2']):print(k1, k2)3、調用方法:直接調用Python的一些方法,例如:
df.groupby(['key1', 'key2']).describe()groupby最重要的操作可能就是aggregate,filter,transform,apply方法了:
1、累計aggregate。剛剛演示過例如sum的簡單累計方法,但是aggregate()其實可以支持更復雜的操作。
也可以通過字典來指定不同列需要的累計函數:
df.groupby(['key1']).agg({'data1': 'min','data2': 'max'})2、過濾filter。過濾的操作可以讓你按照分組的屬性丟棄若干數據。
def filter_func(x):return x['data2'].std()>1df.groupby('key1').filter(filter_func)最后打印出來的結果是‘key1’列只有’a’了,因為’b’列的標準差小于1,所以就被過濾掉了。
3、轉換transform。數據經過轉換后,其形狀跟原來的輸入數據是一樣的,例如實現數據標準化,就是將每一組的樣本數據減去各組的均值;
4、apply()方法。它可以讓你在每個組上應用任意方法。下面的例子是將第一列數據已第二列的和為基數進行標準化:
def norm_by_data2(x):x['data1'] /= x['data2'].sum()return xdf.groupby('key1').apply(norm_by_data2)總結
- 上一篇: 方法入参
- 下一篇: java widget_Java Fav