gpt4 book ai didi

python - 如何用两列分组值的中值替换数据框中的空值?

转载 作者:行者123 更新时间:2023-12-01 07:28:24 26 4
gpt4 key购买 nike

我有一个 Python 数据框,其中包括个人在一周内使用某些食物的频率。我想清理我的数据框,并将空值替换为每个人使用的每种食物类别的中值频率。如何用每个人每个食物类别的 meidan 替换 null 值?

user  ffq    food       food-category
1 1 apple fruit
1 3 banana fruit
1 2 tomato vegetables
1 nan carrot vegetables
1 3 potato vegetables
1 nan peach fruit
2 3 apple fruit
2 nan banana fruit
2 2 tomato vegetables
2 nan carrot vegetables
2 3 peach fruit

结果应该是这样的:

user  ffq    food       food-category
1 1 apple fruit
1 3 banana fruit
1 2 tomato vegetables
1 **2.5** carrot vegetables
1 3 potato vegetables
1 **2** peach fruit
2 3 apple fruit
2 **3** banana fruit
2 2 tomato vegetables
2 **2** carrot vegetables
2 3 peach fruit

如果有人可以提供帮助,我将不胜感激

最佳答案

我猜您想用组的均值而不是中值来填充缺失值。我们可以使用 .fillna() 以及 .groupby().transform() 函数通过一行代码来完成此操作。首先,让我们创建包含所需列的 DataFrame。

# Create a DataFrame
df = pd.DataFrame({'user':['1','1','1','1','1','1', '2', '2', '2', '2', '2'],
'ffq':[1, 3, 2, np.nan, 3, np.nan, 3, np.nan, 2, np.nan, 3],
'food-category':['fruit', 'fruit', 'vegetables', 'vegetables',
'vegetables', 'fruit', 'fruit', 'fruit', 'vegetables',
'vegetables', 'fruit']})

我们现在可以使用所需的插补方法来填充缺失值,例如均值中位数众数。下面的插补是用 mean 完成的,以获得问题中提到的结果。

# Apply fillna function within each group
df['ffq'] = df.groupby(['user', 'food-category']).transform(lambda x: x.fillna(x.mean()))
    user   ffq   food-category
0 1 1.0 fruit
1 1 3.0 fruit
2 1 2.0 vegetables
3 1 2.5 vegetables
4 1 3.0 vegetables
5 1 2.0 fruit
6 2 3.0 fruit
7 2 3.0 fruit
8 2 2.0 vegetables
9 2 2.0 vegetables
10 2 3.0 fruit

.transform() 方法用于执行特定于组的计算,在本例中为 mean,它返回一个类似索引的对象。请参阅User Guide了解更多信息。

关于python - 如何用两列分组值的中值替换数据框中的空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57331773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com