Объединить панды dataFrames на основе значений строк - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть два файла .tsv, которые выглядят так:

ID prop name size
A   x   rob    2
B   y   sally  3
C   z   debby  5
D   w    meg   6

и

ID lst_name area
A   sanches  4
D    smith   7 
C    roberts  8

Я загрузил их в панды DataFrames и хотел бы объединить их, чтобы я получил новыйdataFrame:

ID-name prop name size lst_name area
A   x   rob    2    sanches  4
B   y   sally  3
C   z   debby  5   roberts   8
D   w    meg   6    smith    7

Я пытался сделать это с помощью pd.merge(), но у меня возникают проблемы со следующим:

df = pd.DataFrame.from_csv("a.tsv", sep='\t')
df1 = pd.DataFrame.from_csv("b.tsv", sep='\t')
result = pd.merge(df, df1, how='inner',on=["ID","ID-name"])

Возможно ли выполнить подобное слияние с пандами

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вот один из способов сделать это, используя join

df1 = pd.DataFrame({'ID':['A','B','C','D'],'prop':['x','y','z','w'],'name':['rob','sally','debby','meg'],'size':[2,3,5,6]})
df2 = pd.DataFrame({'ID':['A','D','C'],'lst_name':['sanches','smith','roberts'],'area':[4,7,8]})
df1.set_index('ID').join(df2.set_index('ID')).reset_index()

>>>
  ID prop   name  size lst_name  area
0  A    x    rob     2  sanches   4.0
1  B    y  sally     3      NaN   NaN
2  C    z  debby     5  roberts   8.0
3  D    w    meg     6    smith   7.0
0 голосов
/ 27 февраля 2019

Вам понадобится левое соединение (или внешнее соединение, конечно, в зависимости от вашего случая), так как в этом примере вы также хотели бы видеть записи для B, даже если у него нет записей на df1.

result = pd.merge(df, df1, how="left",on=["ID","ID"])

      prop   name  size lst_name  area
ID ID
A  A     x    rob     2  sanches   4.0
B  B     y  sally     3      NaN   NaN
C  C     z  debby     5  roberts   8.0
D  D     w    meg     6    smith   7.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...