我有一个包含多行的 csv 文件,如下所示
Id Name Marks1 Marks2 Marks3 Marks4 Marks5
1 ABC 10 NAN NAN NAN NAN
2 BCD 15 NAN NAN NAN NAN
3 CDE 17 NAN NAN NAN NAN
1 ABC NAN 18 NAN 17 NAN
2 BCD NAN 10 NAN 15 NAN
1 ABC NAN NAN 16 NAN NAN
3 CDE NAN NAN 19 NAN NAN
我想使用 python 中的 pandas 将具有相同 id 和名称的行合并为一行。输出应该是:
Id Name Marks1 Marks2 Marks3 Marks4 Marks5
1 ABC 10 18 16 17 NAN
2 BCD 15 10 NAN 15 NAN
3 CDE 17 NAN 19 NAN NAN
最佳答案
IIUC,DataFrame.groupby
+ as_index=False
与 GroupBy.first
消除NaN
。
#df = df.replace('NAN',np.nan) #If necessary
df.groupby(['Id','Name'],as_index=False).first()
如果您认为在某些列中可能有一对具有非空值的 Id Name,您可以使用 GroupBy.apply
与 Series.ffill
和 Series.bfill
+ DataFrame.drop_duplicates
保留所有信息。
df.groupby(['Id','Name']).apply(lambda x: x.ffill().bfill()).drop_duplicates()
输出
Id Name Marks1 Marks2 Marks3 Marks4 Marks5
0 1 ABC 10 18 16 17 NaN
1 2 BCD 15 10 NaN 15 NaN
2 3 CDE 17 NaN 19 NaN NaN
关于python - 使用 python pandas 将 csv 文件中的多行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59747062/