Python 从一列到另一列中计算子字符串的出现次数
我有两个正在使用的数据帧,一个包含玩家列表,另一个包含来自另一个数据帧的玩家的逐场数据。这两个数据帧中感兴趣的行的部分如下所示Python 从一列到另一列中计算子字符串的出现次数,python,pandas,Python,Pandas,我有两个正在使用的数据帧,一个包含玩家列表,另一个包含来自另一个数据帧的玩家的逐场数据。这两个数据帧中感兴趣的行的部分如下所示 0 Matt Carpenter 1 Jason Heyward 2 Peter Bourjos 3 Matt Holliday 4 Jhonny Peralta 5 Matt Adams ... Name: Name, dtype: object
0 Matt Carpenter
1 Jason Heyward
2 Peter Bourjos
3 Matt Holliday
4 Jhonny Peralta
5 Matt Adams
...
Name: Name, dtype: object
0 Matt Carpenter grounded out to second (Grounder).
1 Jason Heyward doubled to right (Liner).
2 Matt Holliday singled to right (Liner). Jason Heyward scored.
...
Name: Play, dtype: object
我试图做的是在第一个数据帧中创建一个列,计算字符串(df['Name']+'scored')在另一个数据帧中的列中出现的次数。例如,它将搜索“Matt Carpenter scored”、“Jason Heyward scored”等实例。我知道您可以使用str.contains来执行这类操作,但它似乎只有在输入显式字符串时才起作用。比如说,
batter_game_logs_df['R vs SP'] = len(play_by_play_SP_df[play_by_play_SP_df['Play'].str.contains('Jason Heyward scored')].index)
很好,但如果我尝试
batter_game_logs_df['R vs SP'] = len(play_by_play_SP_df[play_by_play_SP_df['Play'].str.contains(batter_game_logs_df['Name'].astype(str) + ' scored')].index)
它返回错误“Series”对象是可变的,因此不能对它们进行散列。我已经研究过各种类似的问题,但在我的一生中都找不到解决这个问题的方法。在此方面的任何帮助都将不胜感激,谢谢 我认为需要通过regex将所有值连接到Name
,然后通过以下方式创建指示符列并添加所有缺少的列:
最后一个(如有必要)到df1
:
df = df2.join(df)
print (df)
Play Matt Carpenter scored \
0 Matt Carpenter grounded out to second (Grounder). 0
1 Jason Heyward doubled to right (Liner). 0
2 Matt Holliday singled to right (Liner). Jason ... 0
Jason Heyward scored Peter Bourjos scored Matt Holliday scored \
0 0 0 0
1 0 0 0
2 1 0 0
Jhonny Peralta scored Matt Adams scored
0 0 0
1 0 0
2 0 0
这是按照您描述的方式工作的(但是我不完全了解正则表达式的情况-我将更深入地研究它以找出答案),但是我如何在df1的一列中汇总这些事件?所以在玩家姓名栏旁边,我会有一个0对应马特·卡彭特的栏,1对应杰森·海沃德的栏,等等。谢谢,这很有效!不一定是最漂亮的方法,但它能完成任务。
df = df2.join(df)
print (df)
Play Matt Carpenter scored \
0 Matt Carpenter grounded out to second (Grounder). 0
1 Jason Heyward doubled to right (Liner). 0
2 Matt Holliday singled to right (Liner). Jason ... 0
Jason Heyward scored Peter Bourjos scored Matt Holliday scored \
0 0 0 0
1 0 0 0
2 1 0 0
Jhonny Peralta scored Matt Adams scored
0 0 0
1 0 0
2 0 0