我在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。 ”。那怎么办请帮助我
答案 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