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