31

次の列を持つ csv ファイルを読み込んでいます: date、textA、textB、numberA、numberB

date、textA、textB の列でグループ化したいのですが、numberA には「sum」を適用し、numberB には「min」を適用したいと考えています。

data = pd.read_table("file.csv", sep=",", thousands=',')
grouped = data.groupby(["date", "textA", "textB"], as_index=False)

...しかし、2 つの異なる集計関数を 2 つの異なる列に適用する方法がわかりませんか? いえsum(numberA), min(numberB)

4

1 に答える 1

43

メソッドは dict を受け入れることができます。aggこの場合、キーは関数が適用される列を示します。

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) である見にくい文字が含まれていた可能性があります。

于 2013-09-16T21:34:47.140 に答える