#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