更改具有多个索引的groupby对象中的值

问题描述 投票:0回答:1

我将以下df分组,然后尝试更改每个类型总和的US值,但得到nan:

dff=pd.DataFrame({'country':['US','US','UK','UK','FR','FR','ES','ES'],'type':['A','B','C','B','A','C','A','B'],'sales':[100,200,100,100,50,10,20,40]})

grouped=dff.groupby(['country','type'])['sales'].sum()

grouped['US']=dff.loc[dff.country!='US'].groupby('type')['sales'].sum()

print(grouped)

enter image description here

我想得到:

美国A 70

US B 140

python pandas pandas-groupby
1个回答
0
投票

通过MultiIndex创建MultiIndex.from_product以将系列分配给MultiIndex.from_product级别:

US

0
投票

通话时

s = dff.loc[dff.country!='US'].groupby('type')['sales'].sum()
s.index = pd.MultiIndex.from_product([['US'], s.index])
grouped['US'] = s

print (grouped)
country  type
ES       A        20
         B        40
FR       A        50
         C        10
UK       B       100
         C       100
US       A        70
         B       140
Name: sales, dtype: int64

您获得3个值

dff.loc[dff.country != 'US'].groupby('type')['sales'].sum()

但是

type
A     70
B    140
C    110
Name: sales, dtype: int64

只有2个值

grouped["US"]

您可以尝试:

type
A     70
B    140
Name: sales, dtype: int64
dff.loc[dff.country != 'US'].groupby('type')['sales'].sum()[["A", "B"]]
© www.soinside.com 2019 - 2024. All rights reserved.