首页 > 解决方案 > 对给定行,pandas 跨列的分类特征标签求和

问题描述

对df中每个实例的分类变量的(相同)标签计数求和的pythonic方法是什么?例如:

qualityOfLife_df = pd.DataFrame([['A', 'Up', 'Up', 'Same'], 
                               ['B', 'Up', 'Down', 'Up'],
                                ['C', 'Down', 'Down', 'Down']],
                               columns = ['City', 'Crime', 'Pollution', 'Jobs'])

在添加标签计数列后应该给出:

  City Crime Pollution  Jobs  nUp  nDown  nSame
0    A    Up        Up  Same    2      0      1
1    B    Up      Down    Up    2      1      0
2    C  Down      Down  Down    0      3      0

谢谢

标签: pythonpython-3.xpandascounter

解决方案


您可以pd.Series.value_counts在每一行上应用该函数,然后在用nan零替换 s 后将计数连接到dataframe.

>>> counts = qualityOfLife_df.apply(pd.Series.value_counts, axis=1)[['Up', 'Down', 'Same']].fillna(0)
>>> pd.concat((qualityOfLife_df, counts), axis=1)
  City Crime Pollution  Jobs   Up  Down  Same
0    A    Up        Up  Same  2.0   0.0   1.0
1    B    Up      Down    Up  2.0   1.0   0.0
2    C  Down      Down  Down  0.0   3.0   0.0

同样如评论中所述,您可以使用astype(int)将浮点数转换为整数。我建议,为了内存优化,如果您正在处理更大的数据集,请使用较小的整数类型,例如np.int16np.int8基于 count 可能持有的最大数量。

>>> pd.concat((qualityOfLife_df, counts.astype(int)), axis=1)
  City Crime Pollution  Jobs  Up  Down  Same
0    A    Up        Up  Same   2     0     1
1    B    Up      Down    Up   2     1     0
2    C  Down      Down  Down   0     3     0

推荐阅读