Pandas - 可以使用两种不同的聚合来聚合两列吗?

标签 pandas aggregation

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

我想按列分组:date、textA 和 textB - 但想对 numberA 应用“sum”,但对 numberB 应用“min”。

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

...但我看不到如何将两个不同的聚合函数应用于两个不同的列?
IE。 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' (无间断空间),例如。

关于Pandas - 可以使用两种不同的聚合来聚合两列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18837659/

相关文章:

c# - 如何使用 C# 聚合重复记录并求和

Pandas DataFrame 自定义 agg 函数奇怪的行为

Elasticsearch - 在同一嵌套范围内聚合多个字段

python - Pandas 0.18 : out of memory error when reading CSV file with categoricals

Python/Numpy - 填补非连续点之间的空白?

python - Pandas 元组 groupby 聚合

mongodb - (MongoDB) 在同一管道中结合并集和交集

Python Pandas 阅读

python - 计算 pandas 数据框中的加权平均值

c# - 非聚合根可以保存另一个非聚合根的引用吗?