Python 熊猫元组分组聚合

Python 熊猫元组分组聚合,python,pandas,group-by,tuples,Python,Pandas,Group By,Tuples,我的数据框的某些列包含元组。每当我通过group by进行聚合时,除非明确指定,否则列不会出现在结果数据帧中 例如 df=pd.DataFrame() df['A']=[1,2,1,2] df['B']=[1,2,3,4] df['C']=map(λs:,df['B'])) 打印df A、B、C 0 1 1 (1,) 1 2 2 (2,) 2 1 3 (3,) 3 2 4 (4,) 如果我按以下方式执行,则聚合中不会出现列C 打印df.groupby('A').sum(

我的数据框的某些列包含元组。每当我通过group by进行聚合时,除非明确指定,否则列不会出现在结果数据帧中

例如

df=pd.DataFrame()
df['A']=[1,2,1,2]
df['B']=[1,2,3,4]
df['C']=map(λs:,df['B']))
打印df
A、B、C
0  1  1  (1,)
1  2  2  (2,)
2  1  3  (3,)
3  2  4  (4,)
如果我按以下方式执行,则聚合中不会出现列
C

打印df.groupby('A').sum() B A. 1 4 2 6 但如果我显式地指定它,它就会像预期的那样出现

print df[['A','C']].groupby('A').sum()
C
A.
1  (1, 3)
2  (2, 4)
你能告诉我为什么在第一种情况下,
C
列没有出现吗


我希望它在默认情况下运行。

因为您按列
B
进行聚合,而不是按列
C
进行聚合:

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['A'] = [1, 2, 1, 2]
df['B'] = [1, 2, 3, 4]
df['C'] = map(lambda s: (s,), df['B'])
print df

df.at[0,'B'] = 10
print df
   A   B     C
0  1  10  (1,)
1  2   2  (2,)
2  1   3  (3,)
3  2   4  (4,)

print df.groupby('A').sum()
    B
A    
1  13
2   6

print df.groupby('A')['B'].sum()
1    13
2     6
Name: B, dtype: int64

你没有忘记像df.groupby('a')['C'].sum()中那样的
C
?我可能确实遗漏了一些东西,但我不知道具体是什么。好的,让我添加一个额外的列
df['D']=[5,6,7,8]
。然后我希望
df.groupby('A').sum()
的输出包含所有三列
B
C
D
,但我得到的是
B
D
,而不是
C
。对不起,我没听清楚。我可以添加一个额外的列
df['D']=[5,6,7,8]
df.groupby('A').sum()
的输出同时包含
B
D
,但不包含
C
。我想按所有列进行聚合。列
A
转换为索引,因此聚合后的列可以是列
B
C
。但是列
C
被省略,因为groupby省略了一些列。您可以检查,part
New:省略“讨厌的”列
太棒了!如果程序员知道她在做什么,有没有办法不省略列?这个问题很难回答,我不知道该怎么做。也许只有您可以指定聚合列
df.groupby('A')['C'].sum()
,然后使用
df.groupby('A').sum()按列输出。