次の列があるcsvファイルを読み込んでいます:date、textA、textB、numberA、numberB
列でグループ化したい:dateA、textA、textB-「sum」をnumberAに適用し、「min」をnumberBに適用したい。
_data = pd.read_table("file.csv", sep=",", thousands=',')
grouped = data.groupby(["date", "textA", "textB"], as_index=False)
_
...しかし、2つの異なる集計関数を2つの異なる列に適用する方法がわかりませんか?つまりsum(numberA), min(numberB)
agg
メソッドはdictを受け入れることができます。その場合、キーは関数が適用される列を示します。
grouped.agg({'numberA':'sum', 'numberB':'min'})
例えば、
import numpy as np
import pandas as pd
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'number A': np.arange(8),
'number B': np.arange(8) * 2})
grouped = df.groupby('A')
print(grouped.agg({
'number A': 'sum',
'number B': 'min'}))
収量
number B number A
A
bar 2 9
foo 0 19
これは、Pandasが列名のスペースを処理できることも示しています。問題の原因が何であるかはわかりませんが、リテラルスペースは問題を引き起こしていないはずです。これを調査したい場合さらに、
print(df.columns)
列名を再割り当てせずには、名前のrepr
を表示します。列名に、スペース(またはその他の文字)のように見えても、実際にはu'\xa0'
(NO-BREAK SPACE)など。