Python 熊猫元组分组聚合
我的数据框的某些列包含元组。每当我通过group by进行聚合时,除非明确指定,否则列不会出现在结果数据帧中 例如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(
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省略了一些列。您可以检查,partNew:省略“讨厌的”列
太棒了!如果程序员知道她在做什么,有没有办法不省略列?这个问题很难回答,我不知道该怎么做。也许只有您可以指定聚合列df.groupby('A')['C'].sum()
,然后使用df.groupby('A').sum()按列输出。