我有两个数据框:
df1(游戏中发生的每个事件的一行)
日期 | 游戏 | 事件类型 | 播放器 | 时间 |
---|---|---|---|---|
2010年2月28日 | 美国vs加拿大 | 对抗 | 西德尼·克罗斯比 | 20:00 |
2010年2月28日 | 美国vs加拿大 | 经过 | 德鲁·多迪 | 19:59 |
2010年2月28日 | 美国vs加拿大 | 经过 | 斯科特·尼德迈耶(Scott Niedermayer) | 19:42 |
2010年2月28日 | 美国vs加拿大 | 射击 | 西德尼·克罗斯比 | 18:57 |
2010年2月28日 | 美国vs加拿大 | 带走 | 丹妮·希特利 | 18:49 |
2010年2月28日 | 美国vs加拿大 | 射击 | 丹妮·希特利 | 18:02 |
2010年2月28日 | 美国vs加拿大 | 射击 | 西德尼·克罗斯比 | 17:37 |
df2
播放器 |
---|
西德尼·克罗斯比 |
丹妮·希特利 |
斯科特·尼德迈耶(Scott Niedermayer) |
德鲁·多迪 |
如何在df2中创建一个与每个数据帧中的Player列匹配的新列,并计算df1中的事件类型为“射击”的每一行?
这是我在此示例中寻找的输出:
播放器 | 射门 |
---|---|
西德尼·克罗斯比 | 2 |
丹妮·希特利 | 1个 |
斯科特·尼德迈耶(Scott Niedermayer) | 0 |
德鲁·多迪 | 0 |
我是Python的新手,如果我缺少一个简单的答案,我深表歉意。谢谢!
您可以过滤df1
for 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
奖励:使用crosstab
和merge
一次获取所有统计信息:
df2.merge(pd.crosstab(df1['Player'], df1['Event Type']),
on='Player', how='left')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句