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',您可以放置您感兴趣的列列表。
我一直在网上搜索是否有一种简单的方法可以使用 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',您可以放置您感兴趣的列列表。