我有一个像这样形成的数据帧:
+------+------+------+--------+--------+--------+--------+
| 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 情况下走很长的路?
让我们使用字符串操作和groupby
axis=1
和max
:
df.groupby(df.columns.str[:4], axis=1).max()
输出:
| | Col1 | Col2 | Col3 |
|---:|-------:|-------:|-------:|
| 0 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 1 |