Как совместить два или более dataframe в один, которые получаются в ходе выполнения цикла?
Имеем два фрейма данных, в каждом из них есть общий столбец (INN в данном случае). Требуется вытащить строки из второго фрейма (df2), значение столбца INN которых совпадет со значением из первого фрейма (df1). В ходе выполнения цикла получается 2 или более фрейма данных. Для дальнейшей работы их следует как-то объединить в один, но никак не удается. Подскажите, пожалуйста, правильный способ их объединения. Благодарю!
import pandas as pd
data1 = [['A', '7478399993'], ['B', '4839948823'], ['C', '74819984839']]
df1 = pd.DataFrame(data1, columns=['Company', 'INN'])
INN = df1['INN'].to_list()
data2 = [['N57', '1000', '13 JAN', '15', '7478399993'], ['N58', '500', '22 JAN', '12', '4845948823'], \
['N60', '1000', '10 FEB', '18', '4839948823'], ['N61', '1000', '5 JAN', '10', '4449948823'], \
['N62', '900', '29 JAN', '18', '7478399993'], ['N63', '1000', '10 JUN', '14', '4839948823']]
df2 = pd.DataFrame(data2, columns=['Number', 'Value', 'Date', 'Percent', 'INN'])
for x in INN :
df3 = df2.loc[(df2['INN'] == (x))]
print(df3)
Ответы (2 шт):
У вас принципиально неверный подход к работе с датафреймами pandas. Если вы начинаете использовать циклы, то почти наверняка вы делаете что-то не так. все можно сделать векторно, написав вместо вашего цикла одну строку:
res = df2[df2["INN"].isin(df1["INN"])]
res:
Number Value Date Percent INN
0 N57 1000 13 JAN 15 7478399993
2 N60 1000 10 FEB 18 4839948823
4 N62 900 29 JAN 18 7478399993
5 N63 1000 10 JUN 14 4839948823
Или, как вариант, использовать merge
:
res = df2.merge(df1, on='INN')
Результат:
Number Value Date Percent INN Company
0 N57 1000 13 JAN 15 7478399993 A
1 N62 900 29 JAN 18 7478399993 A
2 N60 1000 10 FEB 18 4839948823 B
3 N63 1000 10 JUN 14 4839948823 B