微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 计算DataFrame每行中Series中项的出现次数

我有一个看起来像这样的pandas.DataFrame.

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] 举报,一经查实,本站将立刻删除。

相关推荐