【发布时间】:2020-03-30 01:14:01
【问题描述】:
我有一个 pandas 数据框,其中包含两个分类变量(在我的示例中为城市和颜色),一个包含百分比的列,一个包含权重的列。 我想做一个城市和颜色的交叉表,显示两者的每个组合的 perc 的加权平均值。
我已经设法使用下面的代码来做到这一点,我首先创建一个权重 x perc 的列,然后创建一个带有 (weights x perc) 总和的交叉表,另一个带有权重总和的交叉表,然后最后将一秒一秒。
它有效,但有更快/更优雅的方法吗?
import pandas as pd
import numpy as np
np.random.seed(123)
df=pd.DataFrame()
myrows=10
df['weight'] = np.random.rand(myrows)*100
np.random.seed(321)
df['perc']=np.random.rand(myrows)
df['weight x perc']=df['weight']*df['perc']
df['colour']=np.where( df['perc']<0.5, 'red','yellow')
np.random.seed(555)
df['city']=np.where( np.random.rand(myrows) <0.5,'NY','LA' )
num=pd.crosstab( df['city'], df['colour'], values=df['weight x perc'], aggfunc='sum', margins=True)
den=pd.crosstab( df['city'], df['colour'], values=df['weight'], aggfunc='sum', margins=True)
out=num/den
print(out)
【问题讨论】:
标签: python pandas crosstab categorical-data