如何将列中的多个元素与所有其他列保持不变?
How can I combine several elements in columns with all other columns stay the same?
我需要帮助将 language
列合并为一行,然后删除重复的列,只需合并相同 Movie
、year
的两个不同的 language
,和 Id
.
CSV中类似的列比较多,请帮我想办法合并those.Here是现有的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()
应该可以。
我需要帮助将 language
列合并为一行,然后删除重复的列,只需合并相同 Movie
、year
的两个不同的 language
,和 Id
.
CSV中类似的列比较多,请帮我想办法合并those.Here是现有的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()
应该可以。