python - 使用 python pandas 将 csv 文件中的多行合并为一行

标签 python database pandas pandas-groupby

我有一个包含多行的 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=FalseGroupBy.first消除NaN

#df = df.replace('NAN',np.nan) #If necessary
df.groupby(['Id','Name'],as_index=False).first()

如果您认为在某些列中可能有一对具有非空值的 Id Name,您可以使用 GroupBy.applySeries.ffillSeries.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/

相关文章:

python - numpy 不同长度数组的平均值/标准差

java - 我如何处理 weblogic 卡住的线程?

python-3.x - 如何知道 pandas 列中的每个后续值是否都大于前面的值? Python相关

python - 对数据进行分组,然后将时间戳列转换为行

python - 错误 : Could not find a version that satisfies the requirement dask-cudf (from versions: none)

python - 使用 Python 进行 Modbus TCP

database - 是否可以将 nHibernate 与 Paradox 数据库一起使用?

python - 如何在 pandas 中使用基于 DataFrame bool 值的条件语句

python - 如何在 Pandas 中组合滚动组

php - 如何根据另外两个表的计算从一个表中检索数据?