Заменить ячейку в DF, где ячейка DF является индексом желаемой строки в другом DF

#python #pandas

#python #pandas

Вопрос:

В df1 каждое значение ячейки является индексом строки, которую я хочу получить из df2.

Я хотел бы получить информацию для строки в столбце df2 trial_ms, а затем переименовать столбец в df1 на основе столбца df2, который был захвачен.

Воспроизводимые DF:

 # df1

nan = np.NaN
df1 = {'n1': {0: 1, 1: 2, 2: 8, 3: 2, 4: 8, 5: 8},
 'n2': {0: nan, 1: 3.0, 2: 9.0, 3: nan, 4: 9.0, 5: nan},
 'n3': {0: nan, 1: nan, 2: 10.0, 3: nan, 4: nan, 5: nan}}

df1 = pd.DataFrame().from_dict(df1)

# df2

df2 = {
 'trial_ms': {1: -18963961, 2: 31992270, 3: -13028311},
 'user_entries_error_no': {1: 2, 2: 6, 3: 2},
 'user_entries_plybs': {1: 3, 2: 3, 3: 2},
 'user_id': {1: 'seb', 2: 'seb', 3: 'seb'}}

df2 = pd.DataFrame().from_dict(df2)
  

Ожидаемый результат:

 **n1_trial_ms      n2_trial_ms          n3_trial_ms**

31992270            NaN                 NaN
-13028311           -18934961           NaN

etc.
  

Попытка:

 for index, row in ch.iterrows():
        print(row)
        b = df1.iloc[row]['trial_ms']
  

Выдает ошибку:

Ошибка индекса: позиционные индексаторы выходят за рамки

Ответ №1:

Я полагаю, вам нужен словарь из trial_ms столбцов — ключи являются индексом df1 и заменяют значения на get , если не совпадают значения, получается неверное значение NaN :

 d = df2['trial_ms'].to_dict()
df3 = df1.applymap(lambda x: d.get(x, np.nan)).add_suffix('_trial_ms')
print (df3)
   n1_trial_ms  n2_trial_ms  n3_trial_ms
0  -18963961.0          NaN          NaN
1   31992270.0  -13028311.0          NaN
2          NaN          NaN          NaN
3   31992270.0          NaN          NaN
4          NaN          NaN          NaN
5          NaN          NaN          NaN