pandas groupby计数率
问题描述:
我想总结一下使用pandas进行python包的csv表。pandas groupby计数率
表中有像下面
name_id | visit_address_no
0 | 230
0 | 223
0 | 230
2 | 120
2 | 120
2 | 132
2 | 110
我想下面
name_id | visit_address_no | visit_count | visit_rate
0 | 230 | 2 | 0.666
0 | 223 | 1 | 0.333
2 | 120 | 2 | 0.5
2 | 132 | 1 | 0.25
2 | 110 | 1 | 0.25
我怎样才能让这个总结使用pandas
的CSV表来概括这个表就像一个计划?
我试图
gb = df.groupby(['name_no', 'visit_address_no'])
gb.size()
,但我不能让速度和熊猫数据帧的风格。
答
def f(s):
count = s.value_counts()
rate = count/count.sum()
return pd.DataFrame({"count":count, "rate":rate})
df2 = df.groupby("name_id")["visit_address_no"].apply(f).reset_index()
答
df['name_count'] = df.groupby(['name_id'])['name_id'].transform(len)
df['visit_count'] = df.groupby(['name_id', 'visit_address_no'])['name_id'].transform(len)
summary_df = df.groupby(['name_id', 'visit_address_no']).agg('mean').reset_index()
summary_df['visit_rate'] = summary_df['visit_count']/summary_df['name_count']
这增加了额外的列name_count
,您可以用summary_df.drop(['name_count], axis=1, inplace=True)
下降。这也让我觉得有点不雅 - 我怀疑第二和第三条线可以合并。
编辑 - 啊,这里的聪明方式:
df['name_count'] = df.groupby(['name_id'])['name_id'].transform(len)
grps = df.groupby(['name_id', 'visit_address_no'])['name_count']
summary_df = grps.agg({'visit_count': 'count',
'visit_rate': lambda x: len(x)/mean(x)}).reset_index()
答
首先,
确保您正确引用的列。 在你的代码说
gb = df.groupby(['name_no', 'visit_address_no'])
这应该在你的数据帧
来名_ID像还要确保名_ID是不是你的索引。 在创建DF确保您使用
df = pd.DataFrame.from_csv('Book1.csv', index_col=False)
其中'visit_count'来自目前尚不清楚,但它需要计算的'visit_rate'。 – cel