У меня есть два отдельных кадра данных Pandas с одинаковыми размерами.
Df1
Дф2
Как я могу перебрать всю строку 1 df1 и найти: «A». Если найдено «A», возьмите индекс строки и столбца и найдите в df2, что находится в этой ячейке. В данном случае это будет «Е».
Я пытался:
for row in df1:
if row.columns contains "A":
col_marker = column index
search df2 @ col_marker for whats in that cell...
else:
continue
Я ожидаю, что цикл for будет искать каждую строку df1, находить «A», затем брать это место и искать df2 в том же месте.
Это можно сделать, как показано ниже:
df2[df1 == "A"]
Метод iterrows() используется для перебора строк df1. Для каждой строки индекс строки используется для доступа к той же строке в df2 с помощью метода loc.
# Loop through the rows of df1
for index, row in df1.iterrows():
# Check if "A" is in the row
if "A" in row.values:
# Get the value in the same row and column in df2
value = df2.loc[index, "column1"]
print(value)
E
E
H
Вы также можете использовать df2[df1 == "A"], если предпочитаете следующий вывод.
Просто используйте маску:
out = df1.mask(df1.eq('A'), df2)
Выход:
column1 column2 column3
1 E B C
2 E B C
3 H B C
Или для модификации на месте:
df1[df1.eq('A')] = df2
Изменено df1:
column1 column2 column3
1 E B C
2 E B C
3 H B C
Если вы просто хотите узнать, что находится в df2, не присваивая:
df2[df1.eq('A')]
Выход:
column1 column2 column3
1 E NaN NaN
2 E NaN NaN
3 H NaN NaN