合并拆分为不同列的值



我有一个数据帧,其中一些值被拆分到不同的列中:

ch1a ch1b ch1c ch2
   0    0    4  10
   0    0    5   9
   0    6    0   8
   0    7    0   7
   8    0    0   6
   9    0    0   5

我想对这些列求和,并保留正常的列(如ch2)。

想要的结果应该是这样的:

ch1a ch2
   4  10
   5   9
   6   8
   7   7
   8   6
   9   5 

我看了两个panda函数,mergejoin,但我找不到适合我的情况的函数。

这是我的第一次尝试:

df = pd.DataFrame({'ch1a': [0, 0, 0, 0, 8, 9],'ch1b': [0, 0, 6, 7, 0, 0],'ch1c': [4, 5, 0, 0, 0, 0],'ch2': [10, 9, 8, 7, 6, 5]})
df['ch1a'] = df.sum(axis=1)
del df['ch1b']
del df['ch1c']

然而,结果不是我想要的:

   ch1a  ch2
0    14   10
1    14    9
2    14    8
3    14    7
4    14    6
5    14    5

我有两个问题:

  1. 我怎样才能得到我想要的结果
  2. 有没有一种方法可以通过对某些列的值求和来合并它们,而不必在之后删除其余的列

这将获得所需的结果:

cols_to_sum = ['ch1a', 'ch1b', 'ch1c']
df['ch1'] = df.loc[:, cols_to_sum].sum(axis=1)
df.drop(cols_to_sum, axis=1)

你的问题是你对所有列求和。在这里,我们将其限制为相关的。

不过我不知道如何避开drop

您可以使用axis=1:进行水平(逐列)分组

>>> df.groupby(df.columns.str[:3], axis=1).sum()
   ch1  ch2
0    4   10
1    5    9
2    6    8
3    7    7
4    8    6
5    9    5

在这里,我使用了列的前三个字母来确定目标组,但您可以使用函数、字典或列表:

>>> df.groupby(lambda x: x[:3], axis=1).sum()
   ch1  ch2
0    4   10
1    5    9
2    6    8
3    7    7
4    8    6
5    9    5
>>> df.groupby(['a','b','b','c'], axis=1).sum()
   a  b   c
0  0  4  10
1  0  5   9
2  0  6   8
3  0  7   7
4  8  0   6
5  9  0   5

最新更新