我尝试像这样基于一列“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
答案 0 :(得分:0)
让我们尝试破解下面的代码。
.agg
。lambda
函数来获取 list
'first'
,表明我们只想保留 col3 和 col4agg_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
答案 1 :(得分:0)
根据 Sophods 的回答,一行代码应该可以解决您的问题
df = df.groupby('col1').agg({'col2':lambda x: ",".join(x),'col3':np.mean,'col4':'first'}).reset_index()