假设我有一个像这样的数据框:
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 值的数量。
最佳答案
使用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
关于Python Pandas 计算每行的列中值的数量并将其放入列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43931716/