Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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_Python 3.x_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

Python 如果一列在另一列中具有特定值,则计数

Python 如果一列在另一列中具有特定值,则计数,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,我有一个列user\u id,其中还有数千个重复的user\u id,还有一个列字符串,其中有几个不同的字符串。我想检查一个唯一的用户id是否有特定的字符串,并将用户id和1存储在一个新的数据帧中。如果用户id没有字符串,则我希望存储用户id和0。在本例中,我想给字符串“good”加1,给任何其他字符串加0 我似乎找不到一个不不断循环的好方法 初始数据帧 用户id 一串 1. 好的 1. 较好的 1. 好的 2. 好的 2. 更糟的 3. 更糟的 3. 更糟 您可以使用以下方法验证字符串是否包含

我有一个列user\u id,其中还有数千个重复的user\u id,还有一个列字符串,其中有几个不同的字符串。我想检查一个唯一的用户id是否有特定的字符串,并将用户id和1存储在一个新的数据帧中。如果用户id没有字符串,则我希望存储用户id和0。在本例中,我想给字符串“good”加1,给任何其他字符串加0

我似乎找不到一个不不断循环的好方法

初始数据帧

用户id 一串 1. 好的 1. 较好的 1. 好的 2. 好的 2. 更糟的 3. 更糟的 3. 更糟
您可以使用以下方法验证字符串是否包含:

输出

如果需要作为整数:

res['string'] = res['string'].astype(int)
print(res)
输出

作为替代方案:

res = df.groupby('user_id')['string'].apply(lambda x: x.eq('good').any()).reset_index()
res['string'] = res['string'].astype(int)
print(res)

要使其保持矢量化,我们可以跳过应用:


@塔科很高兴我能帮忙,但埃尔凡的解决方案更好。
res['string'] = res['string'].astype(int)
print(res)
   user_id  string
0        1       1
1        2       1
2        3       0
res = df.groupby('user_id')['string'].apply(lambda x: x.eq('good').any()).reset_index()
res['string'] = res['string'].astype(int)
print(res)
df['string'].eq('good').groupby(df['user_id']).any().astype(int).reset_index(name='is string')
   user_id  is string
0        1          1
1        2          1
2        3          0