假设我有一个类似的数据框:
x y
1 45 T
2 70 T
3 88 F
4 45 F
5 88 F
..
我想要计算两个列的value_counts,并将它们放在单独的列中:
x y z
1 45 1 1
2 70 1 0
3 88 0 2
..
其中x是我有的普通数(整数),y是原始数据帧中得到的T值的数量,z是它得到的F值的数量。
答案 0 :(得分:3)
使用crosstab
+ reset_index
+ rename_axis
:
df = pd.crosstab(df['x'], df['y']).reset_index().rename_axis(None, 1)
print (df)
x F T
0 45 1 1
1 70 0 1
2 88 2 0
df = df.groupby(['x','y'])
.size()
.unstack(fill_value=0)
.reset_index().rename_axis(None, 1)
print (df)
x F T
0 45 1 1
1 70 0 1
2 88 2 0
但是如果需要重命名列(但y
中只需要几个唯一值),则需要dict
:
d = {'T':'y','F':'z'}
df = df.groupby(['x','y'])
.size()
.unstack(fill_value=0)
.rename(columns=d)
.rename_axis(None, 1)
.reset_index()
print (df)
x z y
0 45 1 1
1 70 0 1
2 88 2 0