Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一列到另一列中计算子字符串的出现次数_Python_Pandas - Fatal编程技术网

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