我需要帮助将language
列合并为一行,然后删除重复列,只需将相同Movie
、year
和Id
的两个不同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((
它应该起作用。