Python - Pandas:唯一行及其统计信息的组合

Python - Pandas: combination of unique rows and their statistics

我一直在网上搜索是否有一种简单的方法可以使用 python/pandas 从原始数据中获取仅包含唯一行及其基本统计数据(出现次数、平均值等)的数据框数据框。

到目前为止,我的努力只完成了一半: 我找到了如何使用

获取所有唯一行
 data.drop_duplicates

但是我不太确定我应该如何轻松检索我想要的所有统计数据。我可以在 groupedby 上做一个 for 循环,但那样会很慢。

我想到的另一种方法是使用 groupby 然后使用 describe,例如

data.groupby(allColumns)[columnImInterestedInForStats].describe()

但事实证明,对于 allColumns 中的 19 列,只有 returns 我一行没有任何统计信息。令人惊讶的是,如果我只为 allColumns 选择一个小子集,我实际上确实得到了子集及其所有统计信息的每个唯一组合。我的期望是,如果我填写 groupby() 中的所有 19 列,我会得到所有独特的组?

数据示例:

df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), ['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
df.columns = ['col1','col2','col3']

想要的结果:

col2 col3  mean  count and so on
A    1      1.1    1
     3      4.8    3
B    2      6.0    2
     4      2.5    1
     5      5.2    2
     6      3.4    1
C    3      3.4    1
D    1      5.5    3

进入数据框。

我确定这一定是我遗漏的非常微不足道的东西,但我找不到正确的答案。提前致谢。

您可以使用 agg() 实现所需的效果。

import pandas as pd
import numpy as np

df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), \
                   ['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
df.columns = ['col1','col2','col3']
df['col1'] = df['col1'].astype(float)

df.groupby(['col2','col3'])['col1'].agg([np.mean,'count',np.max,np.min,np.median])

代替 df.groupby 中的 'col1',您可以放置​​您感兴趣的列列表。