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



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

+------+------+------+--------+--------+--------+--------+
| 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 |
+------+------+------+--------+--------+--------+--------+

现在我想将这些列合并为一个,就像所有 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)

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

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

让我们使用字符串操作和groupbyaxis=1max

df.groupby(df.columns.str[:4],  axis=1).max()

输出:

|    |   Col1 |   Col2 |   Col3 |
|---:|-------:|-------:|-------:|
|  0 |      1 |      0 |      1 |
|  1 |      1 |      1 |      1 |
|  2 |      1 |      1 |      1 |

相关内容

最新更新