sri*_*amn 10 python apply pandas
我有一个pandas.DataFrame看起来像这样的.
COL1 COL2 COL3
C1 None None
C1 C2 None
C1 C1 None
C1 C2 C3
Run Code Online (Sandbox Code Playgroud)
对于此数据帧中的每一行,我想计算每个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
Run Code Online (Sandbox Code Playgroud)
因此,我创建了一个以C1,C2和C3作为值的系列 - 一种最重要的方法是循环遍历DataFrame的行和列,然后通过此系列,并在计数器匹配时递增计数器.但有没有一种apply方法能够以紧凑的方式实现这一目标?
And*_*den 11
你可以申请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
Run Code Online (Sandbox Code Playgroud)
因此,您只需填写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
Run Code Online (Sandbox Code Playgroud)
注意:直接为DataFrame提供value_counts方法存在一个悬而未决的问题(我认为应该由pandas 0.15引入).
| 归档时间: |
|
| 查看次数: |
6355 次 |
| 最近记录: |