COL1 COL2 COL3
C1 None None
C1 C2 None
C1 C1 None
C1 C2 C3
对于此数据帧中的每一行,我想计算每个C1,C2,C3的出现次数,并将此信息作为列附加到此数据帧.例如,第一行具有1个C1,0个C2和0个C3.最终的数据框应如下所示
COL1 COL2 COL3 C1 C2 C3
C1 None None 1 0 0
C1 C2 None 1 1 0
C1 C1 None 2 0 0
C1 C2 C3 1 1 1
因此,我创建了一个以C1,C2和C3作为值的系列 – 一种最重要的方法是循环遍历DataFrame的行和列,然后通过此系列,并在计数器匹配时递增计数器.但是,是否有一种可以以紧凑的方式实现这一目标的应用方法?
解决方法:
您可以应用value_counts:
In [11]: df.apply(pd.Series.value_counts, axis=1)
Out[11]:
C1 C2 C3 None
0 1 NaN NaN 2
1 1 1 NaN 1
2 2 NaN NaN 1
3 1 1 1 NaN
因此,您只需填写NaN和applend所需的基本值:
In [12]: df.apply(pd.Series.value_counts, axis=1)[['C1', 'C2', 'C3']].fillna(0)
Out[12]:
C1 C2 C3
0 1 0 0
1 1 1 0
2 2 0 0
3 1 1 1
注意:直接为DataFrame提供value_counts方法存在一个悬而未决的问题(我认为应该由pandas 0.15引入).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。