我有2个数据框。
第一个"named x"
具有以下格式:
ISBN Age Category Count
20 000649840X Middle Adult 6
21 000649840X Young Adult 16
其中相同的ISBN有多行具有不同的类别。
其他数据框"named y"
每个ISBN值都有一行。我想在最后一个数据帧中为每个类别计数创建一个列,其中最终结果应如下所示:
ISBN Middle Adult Count Young Adult Count
我试过
y["Young Adult Count"] = x[(x['Age Category'] == 'Young Adult') & (y['ISBN] == x['ISBN])]['Count']
但它不起作用
答案 0 :(得分:2)
groupby
+ sum
+ unstack
应该有效。
df.groupby(['ISBN', 'Age Category'])\
.Count.sum()\
.unstack()\
.add_suffix(' Count')
Age Category Middle Adult Count Young Adult Count
ISBN
000649840X 6 16
如果您想明确过滤这两个类别,请先使用isin
-
cat = ['Middle Adult', 'Young Adult']
df = df[df['Age Category'].isin(cat)]
现在,执行groupby
。
答案 1 :(得分:2)
我认为您需要this pivot_table
(默认左连接,如果某些ISBN
缺少获取NaN
行)另一个DataFrame
:
print (df1)
ISBN Age Category Count
0 000649840X Middle Adult 6
1 000649840X Young Adult 16
print (df2)
ISBN
0 000649840X
1 0001111111
df3 = df1.pivot_table(index='ISBN',
columns='Age Category',
values='Count',
aggfunc='sum')
df = df2.join(df3.add_suffix(' Count'), on='ISBN')
print (df)
ISBN Middle Adult Count Young Adult Count
0 000649840X 6.0 16.0
1 0001111111 NaN NaN
对于内部联接使用参数how='inner'
:
df = df2.join(df3.add_suffix(' Count'), on='ISBN', how='inner')
print (df)
ISBN Middle Adult Count Young Adult Count
0 000649840X 6 16