如何根据两个不同数据框中的匹配值创建新列?

时间:2021-02-10 15:51:32

标签: python pandas dataframe numpy

我有两个数据框:

df1(游戏中发生的每个事件对应一行)

<头>
日期 游戏 事件类型 玩家 时间
02/28/10 美国对加拿大 对峙 西德尼·克罗斯比 20:00
02/28/10 美国对加拿大 通过 德鲁·道蒂 19:59
02/28/10 美国对加拿大 通过 斯科特·尼德迈尔 19:42
02/28/10 美国对加拿大 拍摄 西德尼·克罗斯比 18:57
02/28/10 美国对加拿大 外卖 丹妮·希特利 18:49
02/28/10 美国对加拿大 拍摄 丹妮·希特利 18:02
02/28/10 美国对加拿大 拍摄 西德尼·克罗斯比 17:37

df2

<头>
玩家
西德尼·克罗斯比
丹妮·希特利
斯科特·尼德迈尔
德鲁·道蒂

如何在 df2 中创建一个与每个数据框中的 Player 列匹配的新列,并计算 df1 中事件类型为“Shot”的每一行?

这是我在这个例子中要寻找的输出:

<头>
玩家 镜头
西德尼·克罗斯比 2
丹妮·希特利 1
斯科特·尼德迈尔 0
德鲁·道蒂 0

我是 Python 新手,所以如果我遗漏了一个简单的答案,我深表歉意。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以为 df1 过滤 shot,然后进行值计数:

shots = df1.loc[df1['Event Type']=='shot', 'Player'].value_counts()

df2['shots'] = df2['Player'].map(shots)
# or using reindex with `fill_value` option
# shots.reindex(df2['Player'], fill_value=0).values

奖励:使用 crosstabmerge 一次性获取所有统计信息:

df2.merge(pd.crosstab(df1['Player'], df1['Event Type']),
          on='Player', how='left')