Python:最多将 Dataframe 的 3 列合并为 1 列,但 3 列中的任何一个都不存在

Lau*_*gel 2 python merge multiple-columns dataframe pandas

我有一个像这样形成的数据框:

+------+------+------+--------+--------+--------+--------+
| Col1 | Col2 | Col3 | Col1.1 | Col2.1 | Col3.1 | Col1.2 |
+------+------+------+--------+--------+--------+--------+
|    0 |    0 |    1 |      1 |      0 |      0 |      0 |
|    1 |    1 |    0 |      0 |      0 |      1 |      0 |
|    0 |    0 |    1 |      0 |      1 |      0 |      1 |
+------+------+------+--------+--------+--------+--------+
Run Code Online (Sandbox Code Playgroud)

现在我想将列合并为一个,就像所有 Col1.* 到 Col1 一样,其中有一个 1:

+------+------+------+--------+--------+
| Col1 | Col2 | Col3 | Col2.1 | Col3.1 |
+------+------+------+--------+--------+
|    1 |    0 |    1 |      0 |      0 |
|    1 |    1 |    0 |      0 |      1 |
|    1 |    0 |    1 |      1 |      0 |
+------+------+------+--------+--------+

df['Col1'] = df[['Col1', 'Col1.1', 'Col1.2']].max(axis=1)
Run Code Online (Sandbox Code Playgroud)

如果所有 3 列都存在,则此方法有效。但显然不是如果我想将 Col2 与 Col2.1 和 Col2.2 合并,因为它们不存在。

有没有办法用 Pandas 或 python 来用一些函数来完成这个任务,还是我需要在很多 if 情况下走很长的路?

Sco*_*ton 5

让我们用字符串操作和groupby使用axis=1,并max

df.groupby(df.columns.str[:4],  axis=1).max()
Run Code Online (Sandbox Code Playgroud)

输出:

|    |   Col1 |   Col2 |   Col3 |
|---:|-------:|-------:|-------:|
|  0 |      1 |      0 |      1 |
|  1 |      1 |      1 |      1 |
|  2 |      1 |      1 |      1 |
Run Code Online (Sandbox Code Playgroud)

  • 喜欢这个解决方案的简洁性。 (2认同)