我正在尝试使用Python 2.7和Pandas将三张桌子加在一起。我的桌子看起来像下面的桌子:
Table 1
ID | test
1 | ss
2 | sb
3 | sc
Table 2
ID | tested | value1 | Value2 | ID2
1 | a | e | o | 1
1 | axe | ee | e | 1
1 | bce | io | p | 3
2 | bee | kd | … | 2
2 | bdd | a | fff | 3
3 | db | f | yiueie | 2
Table 3
ID2 | type
1 | i
1 | d
1 | h
3 | e
1 | o
2 | ou
2 | oui
3 | op
我正在使用的代码如下:
import pandas as pd
xl = pd.ExcelFile(r'C:UsersJoeDesktopProject1xlFilestest1.xlsx')
xl.sheet_names
df = xl.parse("Sheet1")
df.head()
xl2 = pd.ExcelFile(r'C:UsersJoeDesktopProject1xlFilestest2.xlsx')
xl2.sheet_names
df2 = xl2.parse("Sheet1")
df2.head()
xl3 = pd.ExcelFile(r'C:UsersJoeDesktopProject1xlFilestest3.xlsx')
xl3.sheet_names
df3 = xl3.parse("Sheet1")
df3.head()
df3 = df3.groupby('ID2')['type'].apply(','.join).reset_index()
s1 = pd.merge(df2, df3, how='left', on=['ID2'])
代码将表3加入表2我想要的表2。但是,我不知道如何将多列分组以将S1加入表1。我需要S1中每个列中的信息以添加到表1中,但是我只需要每个ID值(总计3行))。有人知道我会怎么做吗?
我的预期输出(参考)如下:
ID | test | type | tested | value1 | ID2
1 | ss | i,d,h,o | a,axe,bce | e,ee,io | 1,1,3
2 | sb | ou,oui | bee,bdd | kd,a | 2,3
3 | sc | e,op | db | f | 2
事先感谢您的帮助。
您可以将cumcount
用于df2
和df3
中的ID2
用于唯一pairs
合并。然后groupby
和汇总join
。
上次使用join
:
df2['g'] = df2.groupby('ID2').cumcount()
df3['g'] = df3.groupby('ID2').cumcount()
df23 = pd.merge(df2, df3, how='left', on=['g','ID2']).astype(str).groupby('ID').agg(','.join)
#for same dtype for match - int
df23.index = df23.index.astype(int)
print (df23)
tested value1 Value2 ID2 g type
ID
1 a,axe,bce e,ee,io o,e,p 1,1,3 0,1,0 i,d,e
2 bee,bdd kd,a ...,fff 2,3 0,1 ou,op
3 db f yiueie 2 1 oui
df = df1.join(df23, on='ID')
#subset and desired order of output columns
cols = ['ID','test','type','tested','value1','ID2']
df = df[cols]
print (df)
ID test type tested value1 ID2
0 1 ss i,d,e a,axe,bce e,ee,io 1,1,3
1 2 sb ou,op bee,bdd kd,a 2,3
2 3 sci oui db f 2