输入:-
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.hstack
和 numpy.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/