我在Python pandas中有以下示例数据框:
+---+------+------+------+
| | col1 | col2 | col3 |
+---+------+------+------+
| 0 | a | d | b |
+---+------+------+------+
| 1 | a | c | b |
+---+------+------+------+
| 2 | c | b | c |
+---+------+------+------+
| 3 | b | b | c |
+---+------+------+------+
| 4 | a | a | d |
+---+------+------+------+
我想对第1-3列中的所有“a”,“b”,“c”和“d”值进行计数,以便最终得到如下数据框:
+---+--------+-------+
| | letter | count |
+---+--------+-------+
| 0 | a | 4 |
+---+--------+-------+
| 1 | b | 5 |
+---+--------+-------+
| 2 | c | 4 |
+---+--------+-------+
| 3 | d | 2 |
+---+--------+-------+
我能做到这一点的一种方法是将列堆叠在一起,然后进行分组计数,但我觉得必须有更好的方法。有人可以帮我这个吗?
答案 0 :(得分:5)
您可以stack()
数据框将所有列放入行中然后执行value_counts
:
df.stack().value_counts()
b 5
c 4
a 4
d 2
dtype: int64
答案 1 :(得分:1)
您可apply
value_counts
与sum
:
print (df.apply(pd.value_counts))
col1 col2 col3
a 3.0 1 NaN
b 1.0 2 2.0
c 1.0 1 2.0
d NaN 1 1.0
df1 = df.apply(pd.value_counts).sum(1).reset_index()
df1.columns = ['letter','count']
df1['count'] = df1['count'].astype(int)
print (df1)
letter count
0 a 4
1 b 5
2 c 4
3 d 2