基于其他列值的熊猫条件填充

cesco83

我正在处理bigmart数据集,实际上我想根据另一列的值替换一列的缺失值:

     Outlet_Size  sales_bin
0         Medium  3000-4000
1         Medium     0-1000
2         Medium  2000-3000
3            NaN     0-1000
4           High     0-1000
...          ...        ...
8518        High  2000-3000
8519         NaN     0-1000
8520       Small  1000-2000
8521      Medium  1000-2000
8522       Small     0-1000

So if train[“Outlet_Size”] value is a NaN and train[“sales_bin”] is  “0-1000”
train[“Outlet_Size”] value shoud become “Small”
else == Medium

但是我真的不知道该怎么写,我发现的所有信息似乎让我感到困惑

有可能做到吗?怎么样?

非常感谢

苏菲安

您可以使用pandas.Series.map而不是numpy.where

对于这些简单的情况,pandas.Series.map似乎更方便,这使得使用字典(例如{'0-1000': 'Small', '2000-3000': 'High'}更容易实现多个插补

numpy.where旨在处理更多逻辑(例如:如果<5则a ^ 2),这在OP用例中不是很有用,但要付出一定的代价,例如使多个插补难以处理(嵌套if-else) )。

脚步 :

  1. 使用pandas.Series.isna()生成一个掩码以标记缺少'Outlet_Size'的pandas.DataFrame的子集
  2. 定义一个带有映射的字典,例如从'0-1000'到'Small';
  3. 将pandas.Series.map的已定义pandas.DataFrame子集中的'Outlet_Size'值替换为已定义的字典作为args参数。
  4. 使用pandas.Series.fillna()捕获未映射的丢失“ Outlet_Size”,并将其估算为默认值。

范例:

import pandas as pd
import numpy as np
fake_dataframe = pd.DataFrame({
    'Outlet_Size' : ['Medium', 'Medium', 'Medium', np.nan, 'High', 'High', np.nan, 'Small', 'Medium', 'Small', np.nan, np.nan],
    'sales_bin': ['3000-4000', '0-1000', '2000-3000', '0-1000', '0-1000', '2000-3000', '0-1000', '1000-2000', '1000-2000', '0-1000', '2000-3000', '1000-2000']
})
missing_mask = fake_dataframe['Outlet_Size'].isna()
mapping_dict = dict({'0-1000': 'Small'})
fake_dataframe.loc[missing_mask, 'Outlet_Size'] = fake_dataframe.loc[missing_mask, 'sales_bin'].map(mapping_dict)
fake_dataframe['Outlet_Size'] = fake_dataframe['Outlet_Size'].fillna('Medium')
print(fake_dataframe)
   Outlet_Size  sales_bin
0       Medium  3000-4000
1       Medium     0-1000
2       Medium  2000-3000
3        Small     0-1000
4         High     0-1000
5         High  2000-3000
6        Small     0-1000
7        Small  1000-2000
8       Medium  1000-2000
9        Small     0-1000
10      Medium  2000-3000
11      Medium  1000-2000

带有多个插补的示例:

import pandas as pd
import numpy as np
fake_dataframe = pd.DataFrame({
    'Outlet_Size' : ['Medium', 'Medium', 'Medium', np.nan, 'High', 'High', np.nan, 'Small', 'Medium', 'Small', np.nan, np.nan],
    'sales_bin': ['3000-4000', '0-1000', '2000-3000', '0-1000', '0-1000', '2000-3000', '0-1000', '1000-2000', '1000-2000', '0-1000', '2000-3000', '1000-2000']
})
missing_mask = fake_dataframe['Outlet_Size'].isna()
mapping_dict = dict({'0-1000': 'Small', '2000-3000': 'High'})
fake_dataframe.loc[missing_mask, 'Outlet_Size'] = fake_dataframe.loc[missing_mask, 'sales_bin'].map(mapping_dict)
fake_dataframe['Outlet_Size'] = fake_dataframe['Outlet_Size'].fillna('Medium')
print(fake_dataframe)
    Outlet_Size sales_bin
0   Medium  3000-4000
1   Medium  0-1000
2   Medium  2000-3000
3   Small   0-1000
4   High    0-1000
5   High    2000-3000
6   Small   0-1000
7   Small   1000-2000
8   Medium  1000-2000
9   Small   0-1000
10  High    2000-3000
11  Medium  1000-2000

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫:如何创建基于其他列值的条件对其他列求和的列?

熊猫使用基于条件的值填充列

使用熊猫库基于csv中的其他列值填充空白值

基于其他列的值的条件更改

如果基于某些其他列不满足条件,则使用值列表填充 Dataframe 列

根据熊猫df中其他列的值有条件地填充列

如何基于熊猫中其他列的条件对列的某些值求平均值

熊猫-基于其他两列的Shift值进行条件计算

熊猫时间序列-需要基于其他列的多个条件提取行值

基于特定列生成列,但填充了其他列的值

根据其他列中的值填充熊猫列

熊猫在基于其他列的列中删除值

如何获得基于熊猫其他列的列的较小值?

用基于其他列的值填充np.nan

根据其他列熊猫填充缺失值

大熊猫基于其他列分配值

Excel:基于其他列的列中的条件格式值

根据其他列的条件填充空值

基于其他列值的列上的条件格式

熊猫:如何根据其他列值的条件求和?

基于其他列条件和其他列计算的数据框新列值

Farword 填充基于其他列与 group by

熊猫使用与其他一些熊猫列对应的先验值填充NaN

如何基于匹配R中其他几个列的行值来填充列的值

如何使用基于Python中其他列值的值填充列?

熊猫从列值中提取子级别并填充其他列中的子级别值

熊猫:根据其他多个列中的值填充空值

熊猫,基于列值的条件列分配

如何在Pandas数据框中的其他列中填充基于新列的值