web-dev-qa-db-ja.com

Pandas-2つの異なる集計を使用して2つの列を集計することは可能ですか?

次の列がある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)

26
marcus adamski

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)など。

34
unutbu