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

2024-09-26 23:45:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据第二列的值填充第一列中的空值。 (例如)

  1. 对于col2中的“Apples”,col1中Nan的位置的值应为12
  2. 对于“Vegies”,col2中的值应为134,而不是col1中的Nan

对于每个描述,在第1列中都有一个特定的代码(编号)。我需要以某种方式绘制它

(忽略这些点)

我所能想到的就是制作一个代码字典并替换null,但这是非常硬编码的

有人能帮忙吗

col1. col2

12.     Apple

134.    Vegies

23.     Oranges

Nan.    Apples

Nan.    Vegies

324.    Sugar

Nan.    Apples

Tags: 代码apple编码字典方式绘制nannull
1条回答
网友
1楼 · 发布于 2024-09-26 23:45:01

**重新更新

在这里,我复制您的DF和实现:

import pandas as pd
import numpy as np
l1 = [12, 134, 23, np.nan, np.nan, 324, np.nan,np.nan,np.nan,np.nan]
l2 = ["Apple","Vegies","Oranges","Apples","Vegies","Sugar","Apples","Melon","Melon","Grapes"]
df = pd.DataFrame(l1, columns=["col1"])
df["col2"] = pd.DataFrame(l2)

df
Out[26]: 
    col1     col2
0   12.0    Apple
1  134.0   Vegies
2   23.0  Oranges
3    NaN   Apples
4    NaN   Vegies
5  324.0    Sugar
6    NaN   Apples
7    NaN    Melon
8    NaN    Melon
9    NaN   Grapes

然后根据规则替换空值:

df.loc[df.col2 == "Vegies", 'col1'] = 134
df.loc[df.col2 == "Apple", 'col1'] = 12
如果你想把这些应用到更大的范围,请考虑先编一本字典: 例如:

item_dict = {"Apples":12, "Melon":65, "Vegies":134, "Grapes":78}

然后使用此自定义函数将所有这些应用于数据帧:

 def item_mapping(df, dictionary, colsource, coltarget):
    dict_keys = list(dictionary.keys())
    dict_values = list(dictionary.values())
    for x in range(len(dict_keys)):
        df.loc[df[colsource]==dict_keys[x], coltarget] = dict_values[x]
    return(df)

用法示例:

item_mapping(df, item_dict, "col2", "col1")
    col1     col2
0   12.0    Apple
1  134.0   Vegies
2   23.0  Oranges
3   12.0   Apples
4  134.0   Vegies
5  324.0    Sugar
6   12.0   Apples
7   65.0    Melon
8   65.0    Melon
9   78.0   Grapes

相关问题 更多 >

    热门问题