热线电话:13121318867

登录
2019-02-18 阅读量: 4154
通过计算来自多个列的不同值的出现次数来创建新df的函数

我想写一个函数,允许我在我的几个列中传递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()

如何让它作为一个允许用户一次传递多个列的单个函数?

0.0000
2
关注作者
收藏
评论(1)

发表评论
啊啊啊啊啊吖
2019-02-18

解决办法:

可以尝试使用的是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

0.0000 0 0 回复