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



我有一列(user_id(有数千个user_id(也重复(,还有一列(string(有几个不同的字符串。我想检查一个唯一的user_id是否有一个特定的字符串,并将用户id和1存储在一个新的数据帧中。如果user_id没有字符串,那么我想存储user_id和0。在这种情况下,我想给字符串"good"加1,给任何其他字符串加0。

如果不无休止地循环,我似乎找不到一个好的方法。

初始PANDAS数据帧

user_id 字符串
1 良好
1 更好
1 良好
2 良好
2 更糟
3 更糟
3 甚至更糟

为了保持矢量化,我们可以跳过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

您可以使用issobset:验证字符串是否包含

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)

最新更新