我尝试基于这样的一列"col1“进行聚合,并保持与其他列相同的值:
df_input
col1 col2 col3 col4
0 ID1 DE 69 min-8
1 ID1 DZ 69 min-8
2 ID3 DA 54 min-15
3 ID3 AC 54 min-15
4 ID3 RC 54 min-15
5 ID8 UC 2 min-40
6 ID8 TC 2 min-40
7 ID8 VC 2 min-40
8 ID8 WC 2 min-40
9 ID7 XC 4 min-7
df_output
col1 col2 col3 col4
0 ID1 DE,DZ 69 min-8
1 ID3 DA,AC,RC 54 min-15
2 ID8 UC,TC,VC,WC 2 min-40
3 ID7 XC 4 min-7发布于 2021-01-09 10:19:33
让我们试着破解下面的代码。
首先,将数据按list
.agg。然后,在col2上使用lambda函数来获取它在一个
'first',以表明我们只想保留E 114Col3<代码>E 215的第一个元素,并且col4
F 221agg_df = (df.groupby('col1')
.agg({'col2': lambda x: x.tolist(),'col3':'first','col4':'first'})
.reset_index())
print(agg_df)
col1 col2 col3 col4
0 ID1 [DE, DZ] 69 min-8
1 ID3 [DA, AC, RC] 54 min-15
2 ID7 [XC] 4 min-7
3 ID8 [UC, TC, VC, WC] 2 min-40为了将col2从存储在list中的值转换为正确的string,我们可以使用,将其元素进行join
agg_df['col2'].apply(lambda x: ','.join(str(i) for i in x))
Out[16]:
0 DE,DZ
1 DA,AC,RC
2 XC
3 UC,TC,VC,WC
Name: col2, dtype: object 发布于 2021-01-09 10:59:31
根据索菲兹的答案,一行代码可以解决你的问题。
df = df.groupby('col1').agg({'col2':lambda x: ",".join(x),'col3':np.mean,'col4':'first'}).reset_index()https://stackoverflow.com/questions/65641270
复制相似问题