2016-03-22 13 views
1

タプルを含むデータフレームの特定の列。グループを介して集計を行うときは、明示的に指定されていない限り、その列は結果のデータフレームに表示されません。パンダタプルgroupby集約

例、

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 
    A B  C 
0 1 1 (1,) 
1 2 2 (2,) 
2 1 3 (3,) 
3 2 4 (4,) 

私はその列Cは、集約

print 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列は最初のケースで表示されませんでしたか?

私はデフォルトで行きたいです。

+0

あなたは 'df.groupby( 'A')[ 'C']のように 'C'を忘れなかった合計()' ? –

+0

私は間違いなく何かを逃しているかもしれないが、私は正確に何がわからない。 [OK]をクリックして、追加の列 'df ['D'] = [5,6,7,8]'を追加しましょう。それで 'df.groupby( 'A')。sum()'の出力が 'B'、' C'、 'D'の3つの列を持つようにしたいのですが、' B'と 'D'しか得られません'C'。 – TruLa

答えて

1

あなたは、列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 
+0

申し訳ありませんが、私はあなたをキャッチしていない。 'df ['D'] = [5、6、7、8]'という余分な列を追加することができます。 'df.groupby( 'A')。sum()'の出力には 'B'と' D'の両方が含まれますが、 'C'は含まれません。私はすべての列で集計したいと思います。 – TruLa

+0

列 'A'はインデックスに変換されるので、集計は列' B'と 'C'になります。 groupby ['sum'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.sum.html)はいくつかの列を省略しているため、' C'列は省略されています。 – jezrael

+1

http://wesmckinney.com/blog/groupby-fu-improvements-in-grouping-and-aggregating-data-in-pandas/、一部「New:Omitting」不都合な「列」 – jezrael

関連する問題