python - 对给定行 pandas 的跨列求和分类特征标签

标签 python python-3.x pandas counter

对于 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

谢谢

最佳答案

您可以在每一行上应用 pd.Series.value_counts 函数,然后在将 nan 替换为零后将计数连接到您的第二个轴 数据框

>>> 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) 将 float 转换为整数。我建议,为了内存优化,如果您要处理较大的数据集,请使用较小的整数类型,例如 np.int16np.int8基于计数可能持有的最大数量。

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

关于python - 对给定行 pandas 的跨列求和分类特征标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50427760/

相关文章:

python - 使用行工厂将字典插入 SQLite 的 native 方法,如果可能的话,使用自动增长的列数

python - 如何使用 Python 修改 XLSX 列格式

python - Scrapy,无法抓取任何页面: "TCP connection timed out: 110: Connection timed out."

Pandas 数据透视表 : trouble with dividing by sum of rows

python - 在 Anaconda 环境中安装 pydot 和 graphviz 包

python - 值错误: invalid literal for int() with base 10: str

python-3.x - 消息 : Tried to run command without establishing a connection

python - 如何高效删除大文件的第一行?

python - 当我使用 apply 和 datetime 函数时,如何编写日期格式?

python - 如果使用 pandas 的几行满足某些条件,如何删除行