我有這個簡單的數據框df:df = pd.DataFrame({'c':[1,1,1,2,2,2,2],'type':['m','n','o','m','m','n','n']})我的目標是計算type每個的值c,然后添加一個大小為的列c。因此,從以下內容開始:In [27]: g = df.groupby('c')['type'].value_counts().reset_index(name='t')In [28]: gOut[28]: c type t0 1 m 11 1 n 12 1 o 13 2 m 24 2 n 2第一個問題解決了。然后,我還可以:In [29]: a = df.groupby('c').size().reset_index(name='size')In [30]: aOut[30]: c size0 1 31 2 4如何將size列直接添加到第一個數據幀?到目前為止,我用作map:In [31]: a.index = a['c']In [32]: g['size'] = g['c'].map(a['size'])In [33]: gOut[33]: c type t size0 1 m 1 31 1 n 1 32 1 o 1 33 2 m 2 44 2 n 2 4哪個有效,但是有更簡單的方法嗎?
2 回答

偶然的你
TA貢獻1841條經驗 獲得超3個贊
使用transform從添加一列回原稿DF groupby聚集,transform返回Series其索引對準原稿DF:
In [123]:
g = df.groupby('c')['type'].value_counts().reset_index(name='t')
g['size'] = df.groupby('c')['type'].transform('size')
g
Out[123]:
c type t size
0 1 m 1 3
1 1 n 1 3
2 1 o 1 3
3 2 m 2 4
4 2 n 2 4

德瑪西亞99
TA貢獻1770條經驗 獲得超3個贊
另一個解決方案:transform len
df['size'] = df.groupby('c')['type'].transform(len)
print df
c type size
0 1 m 3
1 1 n 3
2 1 o 3
3 2 m 4
4 2 m 4
5 2 n 4
6 2 n 4
添加回答
舉報
0/150
提交
取消