python - 根据列值比较 pandas 中的 2 个数据帧

标签 python pandas pandas-groupby

我有 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']

但是没有成功

最佳答案

我认为你需要pivot_tablejoin (默认左连接,因此如果缺少某些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

关于python - 根据列值比较 pandas 中的 2 个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48247716/

相关文章:

python - Bokeh 图未使用 show(p) 或 p.show() 显示

python - 在 Python 3 中可以结合参数描述和类型提示吗?

python - Matplotlib:在同一轴位置显示次要刻度和主要刻度

python dataframe每组什么应用函数没有循环

python - 从展平字典构建嵌套的 Python 字典

python - pyQt QWidget 'flicker' 调整大小和重绘

python - GroupBy pandas DataFrame 并选择最常见的值

Python 数据框删除出现频率较低的行

python - 如何用 1 替换数据帧的所有非 NaN 条目,用 0 替换所有 NaN

python - 取消裸奔累积计数