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

时间:2015-08-06 20:23:46

标签: python pandas describe

我一直在网上搜索是否有一个简单的方法,当使用python / pandas从原始数据帧中获取仅包含唯一行及其基本统计数据(出现,平均值等)的数据帧时。 p>

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

获取所有唯一行
 data.drop_duplicates

但是我不太确定我应该如何轻易地检索出我想要的所有数据。我可以在分组上执行for循环,但这样会很慢。

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

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

但事实证明,对于allColumns中的19列,只返回一行,根本没有统计数据。令人惊讶的是,如果我只为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

进入数据框。

我确定它一定是非常微不足道的东西,但是我找不到合适的答案。提前谢谢。

1 个答案:

答案 0 :(得分:0)

使用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',您可以放置​​您感兴趣的列列表。