计算一列在另一列中是否具有特定值

问题描述 投票:0回答:2

我有一列(user_id)包含数千个 user_id(也重复),另一列(字符串)包含几个不同的字符串。我想检查唯一的 user_id 是否具有特定字符串并将用户 id 和 1 存储在新的数据框中。如果 user_id 没有字符串,那么我想存储 user_id 和 0。在这种情况下,我想为字符串“good”提供 1,为任何其他字符串提供 0。

我似乎无法找到一种不无限循环的好方法。

初始 Pandas 数据框

用户ID 绳子
1
1 更好
1
2
2 更糟
3 更糟
3 更糟

所需的 Pandas 数据框

用户ID 是字符串
1 1
2 1
3 0
python python-3.x pandas dataframe group-by
2个回答
6
投票

为了保持其矢量化,我们可以跳过

apply
:

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

2
投票

您可以使用 issubset:

来验证字符串是否包含
res = df.groupby('user_id')['string'].apply(frozenset(['good']).issubset).reset_index()
print(res)

输出

   user_id  string
0        1    True
1        2    True
2        3   False

如果需要整数:

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)
© www.soinside.com 2019 - 2024. All rights reserved.