0

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

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

 data.drop_duplicates

但是我不太确定我应该如何轻松检索我想要的所有统计数据。我可以在 groupedby 上做一个 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

进入数据框。

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

4

1 回答 1

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])

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

于 2015-08-07T06:41:32.363 回答