您好!我有如下数据框:
df = pd.DataFrame({"ID" : ["1", "1", "1", "2", "3"],
"ID2" : [10, 11, 10, 13, 14],
"ID3" : [1,2,1,4,5],
"code" : ["T", "N", "T", "T", np.nan],
"count" :[100, 200, 300 ,560,500]})
df.set_index(["ID", "ID2", "ID3"], inplace=True)
而且我需要在此数据帧中添加“ col1”,其中将包含:
“ count”列的总和,其中每个多索引的“ code”列为“ T”
所以我需要如下结果。400 in 1和3之类的,因为300 + 100 = 400当然没有解决方案“这3是多索引”,它可以帮助您:)
使用Series.where
方法为更换count
至misisng值,如果没有T
在code
,则使用GroupBy.transform
的总和每ID
到新列和最后一组NaN
,如果没有匹配小号T
:
m = df['code'].eq('T')
df['col1'] = df['count'].where(m).groupby(level=0).transform('sum').where(m)
print (df)
code count col1
ID ID2 ID3
1 10 1 T 100 400.0
11 2 N 200 NaN
10 1 T 300 400.0
2 13 4 T 560 560.0
3 14 5 NaN 500 NaN
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句