Ниже приведены два кадра данных, которые я сравниваю.Я хотел бы получить соответствующее значение столбца в столбце Usage
в df2
, когда смогу сопоставить столбец Item
.Ценю помощь.
df1 = pd.DataFrame({ 'Number':[1.0,3.0,4.0,5.0,8.0,12.0,32.0,58.0,72.0] , 'Item': ['Phone', 'Watch', 'Pen', 'Pencil', 'Pencil', 'toolkit', 'box', 'fork', 'toy']})
df2 = pd.DataFrame({'Number':[3.0, 4.0, 8.0, 12.0, 15.0, 32.0, 54.0, 58.0, 72.0], 'Item':['Watch', 'Pen', 'Pencil', 'Eraser', 'bottle', 'box', 'toolkit', 'fork', 'Phone'], 'Usage':['Time', 'Writing', 'Writing', 'Cleaning', 'Water', 'storage', 'Utility', 'Eat', 'Communication']})
df1
Number Item
0 1.0 Phone
1 3.0 Watch
2 4.0 Pen
3 5.0 Pencil
4 8.0 Pencil
5 12.0 toolkit
6 32.0 box
7 58.0 fork
8 72.0 toy
df2
Number Item Usage
0 3.0 Watch Time
1 4.0 Pen Writing
2 8.0 Pencil Writing
3 12.0 Eraser Cleaning
4 15.0 bottle Water
5 32.0 box storage
6 54.0 toolkit Utility
7 58.0 fork Eat
8 72.0 Phone Communication
Код, используемый для сопоставления, приведен ниже.Он говорит «MatchedBoth», даже когда совпадает только номер.Это нужно исправить.
import numpy as np
df3 = df1.copy()
df3['Matching'] = np.nan
df3.loc[(df3.Number.isin(df2.Number)) & (df3.Item.isin(df2.Item)), 'Matching'] = 'MatchedBoth'
df3.loc[(df3.Number.isin(df2.Number)) & (~df3.Item.isin(df2.Item)),'Matching'] = 'Matched Number Only'
df3.Matching.fillna('No Match', inplace=True)
В том же коде есть возможность встроить возвращаемое значение, которое может извлечь значение столбца Usage
из df2
, соответствующее каждой соответствующей строке.Это может быть случай, когда есть несколько строк, которые могут совпадать, и, следовательно, нам может понадобиться получить соответствующие значения столбца Usage
в список или что-то подобное в окончательном выводе.
Примечание. В моем реальном фрейме данных у меня есть несколько столбцов, и, следовательно, если я использую слияние, это приводит к огромному фрейму данных.Я просто хотел бы создать новый столбец со списком соответствующих совпавших значений, найденных в столбце Usage
в df2.
Вывод должен выглядеть примерно так:
df3
Number Item Matching Usage
0 1.0 Phone No Match NaN
1 3.0 Watch MatchedBoth Time
2 4.0 Pen MatchedBoth Writing
3 5.0 Pencil No Match NaN
4 8.0 Pencil MatchedBoth Writing
5 12.0 toolkit Matched Number Only Utility
6 32.0 box MatchedBoth storage
7 58.0 fork MatchedBoth Eat
8 72.0 toy Matched Number Only Play