日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

groupby机制

發(fā)布時間:2023/12/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 groupby机制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

groupby:分割,應(yīng)用和組合。groupby經(jīng)常只需一行代碼,就可以計算每組的和,均值,計數(shù),最小值以及其他累計值。它返回一個DataFrameGroupby對象,你可以將它看成是一個特殊的DataFrame對象,里面隱藏著若干組數(shù)據(jù)。

groupby的基本操作方法:
從創(chuàng)建DataFrame開始:

df = pd.DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],'key2': ['one', 'two', 'one', 'two', 'one'],'data1': np.random.randn(5),'data2': np.random.randn(5)})

1、按列取值:Groupby對象按列取值,并返回一個修改過的Groupby對象。

df.groupby('key1')['data1'].sum()

2、按組迭代:返回的每一組都是Series或FataFrame:

for k1, k2 in df.groupby(['key1', 'key2']):print(k1, k2)

3、調(diào)用方法:直接調(diào)用Python的一些方法,例如:

df.groupby(['key1', 'key2']).describe()

groupby最重要的操作可能就是aggregate,filter,transform,apply方法了:
1、累計aggregate。剛剛演示過例如sum的簡單累計方法,但是aggregate()其實可以支持更復(fù)雜的操作。

df.groupby(['key1']).agg(['min', np.median, max])

也可以通過字典來指定不同列需要的累計函數(shù):

df.groupby(['key1']).agg({'data1': 'min','data2': 'max'})

2、過濾filter。過濾的操作可以讓你按照分組的屬性丟棄若干數(shù)據(jù)。

def filter_func(x):return x['data2'].std()>1df.groupby('key1').filter(filter_func)

最后打印出來的結(jié)果是‘key1’列只有’a’了,因為’b’列的標(biāo)準(zhǔn)差小于1,所以就被過濾掉了。
3、轉(zhuǎn)換transform。數(shù)據(jù)經(jīng)過轉(zhuǎn)換后,其形狀跟原來的輸入數(shù)據(jù)是一樣的,例如實現(xiàn)數(shù)據(jù)標(biāo)準(zhǔn)化,就是將每一組的樣本數(shù)據(jù)減去各組的均值;

df.groupby('key1').transform(lambda x: x - x.mean())

4、apply()方法。它可以讓你在每個組上應(yīng)用任意方法。下面的例子是將第一列數(shù)據(jù)已第二列的和為基數(shù)進(jìn)行標(biāo)準(zhǔn)化:

def norm_by_data2(x):x['data1'] /= x['data2'].sum()return xdf.groupby('key1').apply(norm_by_data2)

總結(jié)

以上是生活随笔為你收集整理的groupby机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。