Python 熊猫:对多列求和并在多列中获得结果

Python 熊猫:对多列求和并在多列中获得结果,python,pandas,group-by,pandas-groupby,Python,Pandas,Group By,Pandas Groupby,我有一个像这样的“sample.txt” idx A B C D cat J 1 2 3 1 x K 4 5 6 2 x L 7 8 9 3 y M 1 2 3 4 y N 4 5 6 5 z O 7 8 9 6 z ### MY CODE ### import pandas as pd df = pd.read_csv('sample.txt',sep="

我有一个像这样的“sample.txt”

idx A   B   C   D   cat
J   1   2   3   1   x
K   4   5   6   2   x
L   7   8   9   3   y
M   1   2   3   4   y
N   4   5   6   5   z
O   7   8   9   6   z
### MY CODE ###
import pandas as pd

df = pd.read_csv('sample.txt',sep="\t",index_col='idx')
df.info()

df2 = df.groupby('cat').sum()
print( df2 )
      A   B   C   D
cat                
x     5   7   9   3
y     8  10  12   7
z    11  13  15  11
有了这个数据集,我想得到行和列的总和。 在排,这不是什么大问题。 我做出了这样的结果

idx A   B   C   D   cat
J   1   2   3   1   x
K   4   5   6   2   x
L   7   8   9   3   y
M   1   2   3   4   y
N   4   5   6   5   z
O   7   8   9   6   z
### MY CODE ###
import pandas as pd

df = pd.read_csv('sample.txt',sep="\t",index_col='idx')
df.info()

df2 = df.groupby('cat').sum()
print( df2 )
      A   B   C   D
cat                
x     5   7   9   3
y     8  10  12   7
z    11  13  15  11
结果是这样的

idx A   B   C   D   cat
J   1   2   3   1   x
K   4   5   6   2   x
L   7   8   9   3   y
M   1   2   3   4   y
N   4   5   6   5   z
O   7   8   9   6   z
### MY CODE ###
import pandas as pd

df = pd.read_csv('sample.txt',sep="\t",index_col='idx')
df.info()

df2 = df.groupby('cat').sum()
print( df2 )
      A   B   C   D
cat                
x     5   7   9   3
y     8  10  12   7
z    11  13  15  11
但我不知道如何编写代码来得到这样的结果。 (只需在A列和B列以及C列和D列中添加值)

有人能帮我写代码吗

顺便说一下,我不想这样做。 (看起来太枯燥了,但如果这是唯一的办法,我会相信的)

总和一起使用

df = df.set_index('idx')
df = pd.concat([df[['A', 'B']].sum(1), df[['C', 'D']].sum(1)], axis=1, keys=['AB','CD'])
print( df)
     AB  CD
idx        
J     3   4
K     9   8
L    15  12
M     3   7
N     9  11
O    15  15

这能满足你的需要吗?通过将axis=1与DataFrame.apply一起使用,可以使用行中所需的数据构造新列。然后可以删除不再需要的列

In [1]: import pandas as pd
In [5]: df = pd.DataFrame(columns=['A', 'B', 'C', 'D'], data=[[1, 2, 3, 4], [1, 2, 3, 4]])

In [6]: df
Out[6]:
   A  B  C  D
0  1  2  3  4
1  1  2  3  4

In [7]: df['CD'] = df.apply(lambda x: x['C'] + x['D'], axis=1)

In [8]: df
Out[8]:
   A  B  C  D  CD
0  1  2  3  4   7
1  1  2  3  4   7

In [13]: df.drop(['C', 'D'], axis=1)
Out[13]:
   A  B  CD
0  1  2   7
1  1  2   7

当您传递字典或可调用到
groupby
时,它将应用于轴。我指定了轴1,它是列

d = dict(A='AB', B='AB', C='CD', D='CD')
df.groupby(d, axis=1).sum()

这对我来说是新的,谢谢你的回答。您的答案正是我几个小时以来一直在寻找的。非常感谢您的回答。我认为
pir
解决方案更好,所以请使用它;)但有时,我需要把‘A’和‘B’和‘C’相加。有时将“B”与“C”和“D”相加。哪些列和有多少列是可变的。在你的情况下,我必须保持“A”和“B”固定。是的,piRSquared是我要找的。但请允许我对您的快速回复表示感谢。谢谢您的快速回复。虽然我接受皮尔斯夸德的回答,但我想对你说声谢谢。