Заполнение нулевых значений на основе условий в других столбцах - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу заполнить нулевые значения в первом столбце на основе значения 2-го столбца. (Например)

  1. Для «Яблоки» в col2 значение должно быть 12 в местах Nan в столбце col1
  2. Для «Vegies» в col2 значение должно быть 134 вместо Nan в столбце col1

Для каждого описания в 1-м столбце есть определенный c код (число). Мне нужно как-то отобразить это.

(игнорировать. (Точки)

Все, что я могу придумать, это составить словарь кодов и заменить нуль, но это очень жестко закодировано.

Кто-нибудь может помочь?

col1. col2

12.     Apple

134.    Vegies

23.     Oranges

Nan.    Apples

Nan.    Vegies

324.    Sugar

Nan.    Apples

1 Ответ

0 голосов
/ 16 апреля 2020

** Reupdate

Здесь я копирую ваш 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
...