交叉大熊猫?

时间:2019-11-29 22:28:57

标签: python pandas crosstab

我在Pandas中有这样的DataFrame:

 df = pd.DataFrame({"price_range": [0,1,2,3,0,2], "blue":[0,0,1,0,1,1], "four_g":[0,0,0,1,0,1]})

我有这样的一行:pd.crosstab(df['price_range'], df["blue"])

尽管如此,现在我仅看到例如每个“ price_range”有多少个“ blue” 0和1,但是我想扩展此代码,并且还知道每个“ price_range”有多少个“ four_g” 0和1。 ”。那怎么办请帮助我

2 个答案:

答案 0 :(得分:3)

一种方法是使用“融化”:

df_out = df.melt('price_range')

pd.crosstab(df_out['price_range'], df_out['variable'], df_out['value'], aggfunc='sum')

输出:

variable     blue  four_g
price_range              
0               1       0
1               0       0
2               2       1
3               0       1

另一种方法是使用groupby

df.groupby('price_range')[['blue','four_g']].sum()

输出:

             blue  four_g
price_range              
0               1       0
1               0       0
2               2       1
3               0       1

答案 1 :(得分:0)

最简单的方法是使用crosstab通过列表理解来使用2 concat

cols = ['blue', 'four_g']
df_out = pd.concat([pd.crosstab(df['price_range'], df[col]) 
                            for col in cols], keys=cols, axis=1)

Out[1116]:
            blue    four_g
blue           0  1      0  1
price_range
0              1  1      2  0
1              1  0      1  0
2              0  2      1  1
3              1  0      0  1