Python Pandas计算每行的列数值并将其放在列中

时间:2017-05-12 07:21:42

标签: python pandas

假设我有一个类似的数据框:

    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值的数量。

1 个答案:

答案 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

替代groupby + size + unstack

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