如何对 pandas 中的多列进行分组计数
How to groupby count across multiple columns in pandas
我在 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 |
+---+--------+-------+
我可以做到这一点的一种方法是将列堆叠在一起,然后进行分组计数,但我觉得必须有更好的方法。有人可以帮我解决这个问题吗?
你可以apply
value_counts
with 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
您可以 stack()
数据框将所有列放入行中,然后执行 value_counts
:
df.stack().value_counts()
b 5
c 4
a 4
d 2
dtype: int64
我在 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 |
+---+--------+-------+
我可以做到这一点的一种方法是将列堆叠在一起,然后进行分组计数,但我觉得必须有更好的方法。有人可以帮我解决这个问题吗?
你可以apply
value_counts
with 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
您可以 stack()
数据框将所有列放入行中,然后执行 value_counts
:
df.stack().value_counts()
b 5
c 4
a 4
d 2
dtype: int64