31

我正在加载一个 csv 文件,其中包含以下列:日期、文本A、文本B、数字A、数字B

我想按列分组:日期、textA 和 textB - 但想将“sum”应用于 numberA,但将“min”应用于 numberB。

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

...但是我看不到如何将两个不同的聚合函数应用于两个不同的列?IEsum(numberA), min(numberB)

4

1 回答 1

43

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 回答