Python Pandas 中 DataFrame 中的多索引聚合困难?
Difficult aggregation with multi index in DataFrame in Python Pandas?
您好!我有如下所示的 DataFrame:
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”添加到此数据框,它将包含:
每个多索引的“计数”列的总和,其中“代码”列为“T”
所以我需要如下结果。 1 和 3 中的 400 是因为 300 + 100 = 400
当然没有解决方案“This 3 are multiindex”是为了帮助:)
使用 Series.where
for replace count
to misisng values if no T
in code
, then use GroupBy.transform
求和每个 ID
到新列和最后一组 NaN
s 如果没有匹配 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
您好!我有如下所示的 DataFrame:
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”添加到此数据框,它将包含:
每个多索引的“计数”列的总和,其中“代码”列为“T”
所以我需要如下结果。 1 和 3 中的 400 是因为 300 + 100 = 400 当然没有解决方案“This 3 are multiindex”是为了帮助:)
使用 Series.where
for replace count
to misisng values if no T
in code
, then use GroupBy.transform
求和每个 ID
到新列和最后一组 NaN
s 如果没有匹配 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