如何分组条目,计算频率和平均值

时间:2015-09-24 10:36:33

标签: python pandas dataframe frequency

我想查看key1中重复key2key3df的次数,以及估算num平均值的每个键的次数}。

现在,我只能为单个密钥创建keys_summary(例如key1)。如何计算单行中所有键的频率?另外,如何将num的平均值添加到keys_summary

import pandas as pd

s1 = pd.Series(['aaa abc','aaa cba','bbb bbc','aaa cba','bbb bbc'])
s2 = pd.Series([3,5,1,4,0])

df = pd.DataFrame({'descr': s1, 'num': s2})

print df

k1 = pd.Series(['aaa','abc','cba'])
k2 = pd.Series(['bbb','bbc'])
k3 = pd.Series(['ddd','ddc'])

keys = pd.DataFrame({'key1': k1,'key2': k2, 'key3': k3})

print keys

keys_summary = df['descr'].groupby(lambda x : x in keys['key1']).count()

print keys_summary

预期结果必须如下:

keys_summary
     count   avg_num
key1 3       4
key2 2       1
key3 0       0

1 个答案:

答案 0 :(得分:2)

编辑:这是一个不依赖于构建排列列表的替代答案,而是期望每个键的值不相交(也就是说,没有值属于更多而不是一个字符串)。给定数据框dfkeys

keys_summary = pd.DataFrame()
for col in keys:
   keys_summary[col] = df[df.descr.apply(lambda x: any(word in x.split() for word in keys[col]))].describe().num
keys_summary = keys_summary.transpose()

对于问题中的示例,这将产生与下面给出的相同的数据帧。

鉴于你的数据框为keys,你可以生成2乘2的排列列表(如果descr总是两个关键子串,那​​么 - 否则可能需要一些小修改)然后检查他们在df。使用describe方法获取统计信息。

import itertools
#df and keys as given
key_dict = {}
for col in keys:
    perms = []
    for (a,b) in itertools.permutations(keys[col].tolist(), 2):
        perms.append(str(a) + ' ' + str(b))
    key_dict[col] = perms

然后您使用此词典和df数据框生成keys_summary

keys_summary = pd.DataFrame()
for k,v in key_dict.items():
    keys_summary[k] = df[df.descr.isin(v)].describe().num
keys_summary = keys_summary.transpose()

这导致:

      count  mean       std  min   25%  50%   75%  max
key3      0   NaN       NaN  NaN   NaN  NaN   NaN  NaN
key2      2   0.5  0.707107    0  0.25  0.5  0.75    1
key1      3   4.0  1.000000    3  3.50  4.0  4.50    5

如果您不需要,可以删除最小,25%,最大等列。