我一直在网上搜索是否有一个简单的方法,当使用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
进入数据框。
我确定它一定是非常微不足道的东西,但是我找不到合适的答案。提前谢谢。
答案 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',您可以放置您感兴趣的列列表。