我想写一个函数,允许我在我的几个列中传递args,然后计算每个不同值的出现次数,并最终将结果粘贴到一个新的DataFrame。
例如,按照下面的模式,我想计算a,b,c列中1,2,3,4,5等级的次数:
+---+---+---+---+---+
| a | b | c | d | e |
+---+---+---+---+---+
| 1 | 2 | 1 | 3 | 4 |
+---+---+---+---+---+
| 1 | 2 | 2 | 4 | 5 |
+---+---+---+---+---+
| 1 | 3 | 2 | 2 | 4 |
+---+---+---+---+---+
| 5 | 5 | 2 | 2 | 3 |
+---+---+---+---+---+
| 1 | 4 | 4 | 2 | 5 |
+---+---+---+---+---+
码:
我尝试了以下但它不起作用
new_df['a_count'] = df.groupby('a').size()
new_df['b_count'] = df.groupby('b').size()
new_df['c_count'] = df.groupby('c').size()
如何让它作为一个允许用户一次传递多个列的单个函数?








解决办法:
可以尝试使用的是pd.Series.value_counts():
# Mock df
df = pd.DataFrame({key:np.random.randint(1, 6, 5) for key in "abcde"})
a b c d e
0 5 5 2 4 5
1 1 1 2 3 4
2 1 1 1 4 4
3 2 1 1 1 4
4 5 2 4 5 3
cols = ["a", "b", "c"]
new_df = pd.concat([df[c].value_counts() for c in cols], 1).fillna(0).astype(int)
print(new_df)
a b c
1 2 3 2
2 1 1 2
4 0 0 1
5 2 1 0