输入:-
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]
答案 0 :(得分:3)
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]
答案 1 :(得分:2)
尝试使用:
>>> grouped = df.groupby('device_id', as_index=False).sum()
>>> grouped['ids'] = grouped['ids'].apply(lambda x: sorted(set(x), key=x.index))
>>> grouped
device_id ids
0 025c08d535a074b4 [8972, 10595]
1 02612734f96edc43 [10016, 8795, 10019, 8791, 8351, 10052, 8345]
>>>