如何在所有其他列保持不变的情况下组合列中的几个元素



我需要帮助将language列合并为一行,然后删除重复列,只需将相同MovieyearId的两个不同language合并即可。

CSV中有更多类似的列,所以请帮我找出一种组合这些列的方法。这是现有的csv:

f = pd.DataFrame({'Movie': ['name1','name1','name2','name3','name4','name4'],
'Year': ['1905', '1905','1906','1907','1910','1910'],
'Id': ['tt0283985', 'tt0283985','tt0284043','tt3402904','tt3458360','tt3458360'],
'language':['Mandarian','Cantonese','Mandarian','unknown','Cantonese','Mandarian']})

f现在的样子:

Movie  Year         Id   language
0  name1  1905  tt0283985  Mandarian
1  name1  1905  tt0283985  Cantonese
2  name2  1906  tt0284043  Mandarian
3  name3  1907  tt3402904    unknown
4  name4  1910  tt3458360  Cantonese
5  name4  1910  tt3458360  Mandarian

结果应该是这样的:

Movie  Year         Id             language
0  name1  1905  tt0283985  Mandarian,Cantonese
1  name2  1906  tt0284043            Mandarian
2  name3  1907  tt3402904              unknown
3  name4  1910  tt3458360  Cantonese,Mandarian

所以第1行和第2行是相同的,除了语言,我们只需要将它们组合成一行,第5行和第6行也是如此。这是我的尝试:

ff = new_f.groupby(by = ['Movie','Year','Id']).agg(','.join)
ff.to_csv("File.csv", index=False)

但输出很奇怪:所有其他列都消失了,language是唯一剩下的列:

language
Mandarian,Cantonese
Mandarian
unknown
Cantonese,Mandarian
...

默认情况下,groupby将分组键设置为索引,并且您明确要求to_csv不要导出索引,

groupby:中使用as_index=False

ff = f.groupby(by=['Movie','Year','Id'], as_index=False).agg(','.join)
ff.to_csv("File.csv", index=False)

或者,导出to_csv:中的索引

ff = f.groupby(by=['Movie','Year','Id']).agg(','.join)
ff.to_csv("File.csv")

注意。如果中间体对你没有用处,你不需要设置ff变量,你可以直接链接f.groupby(...).agg(...).to_csv(...)

使用以下命令:ff=f.groupby(['Movie','Year','Id'](.agg(','.join(.reset_index((

它应该起作用。

相关内容

最新更新