问题描述
我有以下熊猫数据框:
import pandas as pd
from pandas import Series, DataFrame
data = DataFrame({'Qu1': ['apple', 'potato', 'cheese', 'banana', 'cheese', 'banana', 'cheese', 'potato', 'egg'],
'Qu2': ['sausage', 'banana', 'apple', 'apple', 'apple', 'sausage', 'banana', 'banana', 'banana'],
'Qu3': ['apple', 'potato', 'sausage', 'cheese', 'cheese', 'potato', 'cheese', 'potato', 'egg']})
当值计数大于或等于某个数字时,我想根据value_counts()
更改Qu1
,Qu2
,Qu3
列中的值
I'd like to change values in columns Qu1
,Qu2
,Qu3
according to value_counts()
when value count great or equal some number
例如Qu1
列
>>> pd.value_counts(data.Qu1) >= 2
cheese True
potato True
banana True
apple False
egg False
我想保留值cheese
,potato
,banana
,因为每个值至少出现两次.
I'd like to keep values cheese
,potato
,banana
, because each value has at least two appearances.
根据值apple
和egg
,我想创建值others
From values apple
and egg
I'd like to create valueothers
对于列Qu2
不变:
>>> pd.value_counts(data.Qu2) >= 2
banana True
apple True
sausage True
最终结果如附件test_data
test_data = DataFrame({'Qu1': ['other', 'potato', 'cheese', 'banana', 'cheese', 'banana', 'cheese', 'potato', 'other'],
'Qu2': ['sausage', 'banana', 'apple', 'apple', 'apple', 'sausage', 'banana', 'banana', 'banana'],
'Qu3': ['other', 'potato', 'other', 'cheese', 'cheese', 'potato', 'cheese', 'potato', 'other']})
谢谢!
推荐答案
我将创建一个形状相同的数据框,其中对应的条目为值计数:
I would create a dataframe of same shape where the corresponding entry is the value count:
data.apply(lambda x: x.map(x.value_counts()))
Out[229]:
Qu1 Qu2 Qu3
0 1 2 1
1 2 4 3
2 3 3 1
3 2 3 3
4 3 3 3
5 2 2 3
6 3 4 3
7 2 4 3
8 1 4 1
然后,使用 df.where
中的结果返回相应条目小于2的其他":
And, use the results in df.where
to return "other" where the corresponding entry is smaller than 2:
data.where(data.apply(lambda x: x.map(x.value_counts()))>=2, "other")
Qu1 Qu2 Qu3
0 other sausage other
1 potato banana potato
2 cheese apple other
3 banana apple cheese
4 cheese apple cheese
5 banana sausage potato
6 cheese banana cheese
7 potato banana potato
8 other banana other
这篇关于根据value_counts()更改 pandas 数据框中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!