我有一个包含多行的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中的熊猫将具有相同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发布于 2020-01-15 08:00:36
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名,则可以使用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发布于 2020-01-15 07:58:15
无趣的回答:
pd.groupby(“Name”).mean().reset_index()只有当每个列的每个名称只有一个有效值时,这才能工作。
https://stackoverflow.com/questions/59747062
复制相似问题