Python panda поиск значения в df из другого df - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть два фрейма данных: -

Df1

Time   V1    V2
02:00  D3F3  0041
02:01  DD34  0040

Df2

 FileName  V1    V2
   1111.txt  D3F3  0041
   2222.txt  0000  0040

В основном я хочу сравнить столбцы v1 v2, и если они match print выводит время строки из df1 и строку из имени файла df2. Пока все, что я могу найти, это

isin ()

, который просто дает вам логический вывод.

Таким образом, вывод будет:

1111.txt 02: 00

Я начал использовать кадры данных, потому что, хотя я мог запросить два df на значения V1 / V2, но я не вижу путь. Любые указатели будут высоко оценены

Ответы [ 5 ]

1 голос
/ 11 апреля 2020

Наиболее интуитивным решением является: 1) итерация столбца V1 в DF1; 2) для каждого элемента в этом столбце проверьте, существует ли этот элемент в столбце V1 DF2; 3) если элемент существует в V1 DF2, найдите индекс этого элемента в DF2, и тогда вы сможете найти имя файла.

1 голос
/ 08 апреля 2020

Используйте merge для столбцов данных, которые вы хотите иметь те же значения. Затем вы можете удалить строки со значениями NaN, так как они не будут иметь соответствующих значений. Оттуда вы можете распечатать объединенные значения данных, как вам удобно.

df1 = pd.DataFrame({'Time': ['8a', '10p'], 'V1': [1, 2], 'V2': [3, 4]})
df2 = pd.DataFrame({'fn': ['8.txt', '10.txt'], 'V1': [3, 2], 'V2': [3, 4]})

df1.merge(df2, on=['V1', 'V2'], how='outer').dropna()

=== Вывод: ===

  Time  V1  V2      fn
1  10p   2   4  10.txt
0 голосов
/ 08 апреля 2020

Хотя я думаю, что решение Eri c более pythoni c, если ваша единственная цель - напечатать строки, в которых df1 и df2 имеют одинаковые значения v1 и v2, при условии, что два кадра данных совпадают Длина, вы можете сделать следующее:

for row in range(len(df1)):
    if (df1.iloc[row,1:] == df2.iloc[row,1:]).all() == True: 
        print(df1.iloc[row], df2.iloc[row])
0 голосов
/ 08 апреля 2020

Вы можете использовать опцию слияния с внутренним соединением

    df2.merge(df1,how="inner",on=["V1","V2"])[["FileName","Time"]]
0 голосов
/ 08 апреля 2020

Вы можете попробовать использовать pd.concat.

. В этом случае это будет выглядеть так:

pd.concat([df1, df2.reindex(df1.index)], axis=1)

Это создаст новый фрейм данных со всеми значениями, но в случае, если есть некоторые значения, которые не совпадают в обоих фреймах данных, вернут NaN. Если вы не хотите, чтобы это произошло, вы должны использовать это:

pd.concat([df1, df4], axis=1, join='inner')

Если вы хотите узнать немного больше, используйте pydata: https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...