Наполнить столбец при условии совпадения с другим значениями
У нас есть два массива, в одном, Df1, товары и их номера.
| Description | PN |
|---|---|
| SHAFT | 333 |
| ENGINE | 444 |
| ACTUATOR | 555 |
В другом, Df2, на некоторые из номеров нам дали цену:
| PN | P |
|---|---|
| 333 | 100 |
| 444 | 200 |
Хотим добавить значения столбца "Р" напротив столбца "PN".
list= []
for h in df1['PN']:
for u in zip(df2['PN'], df2['P']):
if h==u[0]:
list.append(u)
a = len(df1['PN'])
b = len(list)
c = a - b
df1['P'] = list(list[1]).extend(['']*c)
то есть мы, если значение из столбца P равно значению столбцу PN, сделали список кортежей из совпадающих значений, ввели новый столбец и выравняли его с длиной массива Дф1. Остаётся только ввести эти совпадающие значения из списка кортежей в новый столбец,
for h in list[0]:
for u in df1['PN']:
for j in list[1]:
if h==u:
df1['P'].append(j)
Объект нового столбца - серия, но машина выдаёт ошибку на строку с аппэнд, что int ne iterable. Как можно доставить значения из того списка кортежей в тот столбец? спасибо.
Ответы (2 шт):
Если вам надо объединить два дата фрейма, то почему не использовать метод join. Пример из документации:
df = pd.DataFrame({'pn': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],
'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
other = pd.DataFrame({'pn': ['K0', 'K1', 'K2'],
'p': ['B0', 'B1', 'B2']})
df.join(other.set_index('pn'), on='pn')
'''
pn A p
0 K0 A0 B0
1 K1 A1 B1
2 K2 A2 B2
3 K3 A3 NaN
4 K4 A4 NaN
5 K5 A5 NaN
Можно воспользоваться методом DataFrame.merge():
res = df1.merge(df2, how="left")
результат:
In [12]: res
Out[12]:
Description PN P
0 SHAFT 333 100.0
1 ENGINE 444 200.0
2 ACTUATOR 555 NaN
PS по умолчанию DataFrame.merge(other) объединяет фреймы по столбцам с совпадающими наименованиями.