【问题标题】:Pandas - How to merge rows with blank columnsPandas - 如何将行与空白列合并
【发布时间】:2019-12-09 13:24:46
【问题描述】:

我正在尝试使用 pandas(对我来说是新手)将相似的 CSV 行合并/合并为一行,但似乎无法弄清楚。如果其他 python 解决方案更好/更容易,我愿意接受。

有很多关于使用 pandas 进行合并/合并的帖子,但我看到的帖子是在合并行时对值进行求和或合并,而不是在合并时将 null 替换为值。我尝试使用 df.drop_duplicates 但这些行并不是真正重复的,所以它没有做任何事情。

CSV 格式:

col1  col2  col3  col4  col5  col6
A     B     D     6     null  null
A     B     E     8     null  null
A     B     F     10    null  null
A     B     D     null  20    null
A     B     E     null  22    null
A     B     F     null  24    null
A     B     D     null  null  44
A     B     E     null  null  46
A     B     F     null  null  48
A     B     G     null  null  50
A     C     D     6     null  null
A     C     E     8     null  null
A     C     F     10    null  null
A     C     D     null  20    null
A     C     E     null  22    null
A     C     F     null  24    null
A     C     D     null  null  44
A     C     E     null  null  46
A     C     F     null  null  48
H     I     D     12    null  null
H     I     J     14    null  null
H     I     K     16    null  null
H     I     D     null  26    null
H     I     J     null  28    null
H     I     K     null  30    null
H     I     D     null  null  52
H     I     J     null  null  54
H     I     K     null  null  56

预期/需要的输出:

col1  col2  col3  col4  col5  col6
A     B     D     6     20    44
A     B     D     8     22    46
A     B     D     10    24    48
A     B     G     null  null  50
A     C     D     6     20    44
A     C     D     8     22    46
A     C     D     10    24    48
H     I     D     12    26    52
H     I     J     14    28    54
H     I     K     16    30    56

【问题讨论】:

  • 如果您确定第 1,2 和 3 列的每个组合的值是唯一的;您可以尝试 groupby 和 sum 或 max。 new_df = df.groupby(['col1', 'col2', 'col3'], as_index = False).max()
  • 谢谢@Vaishali!这似乎奏效了。

标签: python pandas csv merge


【解决方案1】:

您可以通过first查看

df=df.groupby(['col1','col2','col3']).first().reset_index()
df
  col1 col2 col3  col4  col5  col6
0    A    B    D   6.0  20.0  44.0
1    A    B    E   8.0  22.0  46.0
2    A    B    F  10.0  24.0  48.0
3    A    B    G   NaN   NaN  50.0
4    A    C    D   6.0  20.0  44.0
5    A    C    E   8.0  22.0  46.0
6    A    C    F  10.0  24.0  48.0
7    H    I    D  12.0  26.0  52.0
8    H    I    J  14.0  28.0  54.0
9    H    I    K  16.0  30.0  56.0

【讨论】:

  • 这对我不起作用。生成的 CSV 看起来几乎相同。
  • @mikenol 您需要将其分配回df=df.groupby(['col1','col2','col3']).first().reset_index()
  • 谢谢@WeNYoBen。就是这样。我只使用:df.groupby(['col1','col2','col3']).first().reset_index()df.to_csv('file.csv') 当我执行 df=df...时它起作用了...
猜你喜欢
  • 2022-08-16
  • 2017-04-05
  • 2021-02-22
  • 2019-04-28
  • 2020-08-18
  • 2021-07-15
  • 2019-03-25
  • 2021-02-23
  • 1970-01-01
相关资源
最近更新 更多