python - 如何在 pandas 中按 user_id 按组从列表列中获取唯一值

标签 python pandas set pandas-groupby

输入:-

    print(df)
device_id           ids
025c08d535a074b4    [8972]
025c08d535a074b4    [10595, 10595]
02612734f96edc43    [10016, 8795, 10019, 8791, 8351, 8791]
02612734f96edc43    [10016, 8795, 10019, 8791, 8351, 10052, 8345]

应该为每个 device_d 输出唯一的 ID 列表,例如:

device_id           ids
025c08d535a074b4    [8972,10595]
02612734f96edc43    [10016, 8795, 10019,8791,8351,10052, 8345]

我尝试使用 :-->

    df=pd.DataFrame(df.groupby('device_id')['ids'].apply(set))

但它无法正常工作,它在 id 之前添加 ' 并返回类似的列表。

device_id           ids
025c08d535a074b4    [8972,'10595, 10595]
02612734f96edc43    ['10016,8795,10019,8791,8351,8791,'10016]

最佳答案

使用numpy.hstacknumpy.unique :

import numpy as np

df.groupby('device_id')['ids'].apply(lambda x: np.unique(np.hstack(x)))

或者如果维护秩序很重要,请使用 pandas.Series构造函数 drop_duplicates :

df.groupby('device_id')['ids'].apply(lambda x: pd.Series(np.hstack(x)).drop_duplicates().to_list())

[输出]

device_id
025c08d535a074b4                                    [8972, 10595]
02612734f96edc43    [10016, 8795, 10019, 8791, 8351, 10052, 8345]

如果您需要输出为 DataFrame,只需链接 .reset_index :

df.groupby('device_id')['ids'].apply(lambda x: np.unique(np.hstack(x))).reset_index()

[输出]

          device_id                                            ids
0  025c08d535a074b4                                  [8972, 10595]
1  02612734f96edc43  [8345, 8351, 8791, 8795, 10016, 10019, 10052]

关于python - 如何在 pandas 中按 user_id 按组从列表列中获取唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56788373/

相关文章:

python - _imaging C 模块未安装(在 Windows 上)

java - java链接集实现

python - Web 套接字服务器的后台任务

python - 在 Pandas 数据框中随机插入 NA 的值 - 没有行完全丢失

python - 如何填充 NAN "ignoring"索引?

pandas - sklearn : Found input variables with inconsistent numbers of samples: [1, 99]

scala - Scala 中的 SynchronizedSet 和 set 操作

javascript - 使用 Set 在对象数组中查找唯一元素不起作用

python - Python 中的静态类变量,不会为每个实例复制

python - 正则表达式lookbehind和lookahead未找到任何匹配项