Pandas Dataframe добавляет значение в ячейку путем сопоставления заголовка столбца и значения - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть такой фрейм данных:

Num  A    B   C   D
1    wer
1    df
1    ffg
2    asd
2    vb
3    ncnc
3    oiji
4    qwe

Сначала я отфильтрую на основе Num, скажем, я фильтрую для Num = 1

    Num  A    B   C   D
    1    wer
    1    df
    1    ffg

Теперь мне нужнодобавить значение из переменной в ячейку, где встречаются wer и C, аналогично ffg и D

Num  A    B   C   D
1    wer      5
1    df
1    ffg          7

Если какое-либо значение уже существует, новое значение должно заменить его

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Или более простой, понятный способ сделать это:

df2=df[df['Num']==1]
df2.loc[df2['A']=='wer','C']=5
df2.loc[df2['A']=='ffg','D']=7

Или, чтобы пропустить предупреждение, сделайте по индексу:

df2=df[df['Num']==1]
df2.loc[0,'C']=5
df2.loc[2,'D']=7

Оба случая:

print(df2)

Является:

   Num    A   B    C    D
0    1  wer NaN  5.0  NaN
1    1   df NaN  NaN  NaN
2    1  ffg NaN  NaN  7.0

Если вы хотите вернуть его к фактическому фрейму данных:

df[df['Num']==1]=df2
0 голосов
/ 15 ноября 2018

Логическое индексирование является основополагающим для Pandas: прочитайте Индексирование и выбор данных .

Для вашей проблемы вы можете создать логические маски и объединить их для обновления значений с помощью pd.DataFrame.loc:

num_mask = df['num'] == 1
df.loc[num_mask & df['A'].eq('wer'), 'C'] = 5
df.loc[num_mask & df['A'].eq('ffg'), 'D'] = 7

Поскольку самой дорогой частью обычно является построение логических рядов, их повторное использование, где это возможно, является хорошей практикой.

...