【3】数据分析--10--科学计算--Pandas--3--Dataframe(合并,转换,拼接)

(有需求,找)官网: https://pandas.pydata.org/pandas-docs/stable/merging.html

分期整理内容

一、 concat

普通的合并

In [1]: df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
   ...:                     'B': ['B0', 'B1', 'B2', 'B3'],
   ...:                     'C': ['C0', 'C1', 'C2', 'C3'],
   ...:                     'D': ['D0', 'D1', 'D2', 'D3']},
   ...:                     index=[0, 1, 2, 3])
   ...: 

In [2]: df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
   ...:                     'B': ['B4', 'B5', 'B6', 'B7'],
   ...:                     'C': ['C4', 'C5', 'C6', 'C7'],
   ...:                     'D': ['D4', 'D5', 'D6', 'D7']},
   ...:                      index=[4, 5, 6, 7])
   ...: 

In [3]: df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
   ...:                     'B': ['B8', 'B9', 'B10', 'B11'],
   ...:                     'C': ['C8', 'C9', 'C10', 'C11'],
   ...:                     'D': ['D8', 'D9', 'D10', 'D11']},
   ...:                     index=[8, 9, 10, 11])
   ...: 

In [4]: frames = [df1, df2, df3]

In [5]: result = pd.concat(frames)

结果:

加标签的合并

In [6]: result = pd.concat(frames, keys=['x', 'y', 'z'])

二、根据列来合并两个dataframe

2.1 求dataframe的交集

创建数据集

import pandas as pd

left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2'],'C': ['C0', 'C2','C4']},index=['K0', 'K1', 'K2'])

right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],'D': ['D0', 'D2', 'D3']},index=['K0', 'K2', 'K3'])

print 'Left:\n'
Left:

     A   B   C
K0  A0  B0  C0
K1  A1  B1  C2
K2  A2  B2  C4


print '\nRight\n'
print right
Right

     C   D
K0  C0  D0
K2  C2  D2
K3  C3  D3

通过Index合并

result_1 = pd.merge(left, right, left_index=True, right_index=True, how='inner')

print result_1

     A   B C_x C_y   D
K0  A0  B0  C0  C0  D0
K2  A2  B2  C4  C2  D2

通过on合并

result_2 = pd.merge(left, right, on='C', how='inner')
print result_2

    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C2  D2

通过left_on

result_3 = pd.merge(left, right, left_on='C', right_on='C', how='inner')
print result_3

    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C2  D2

注:

这个how 有四种模式:

  • left 以左边的dataframe为主
  • right 以右边的dataframe为主
  • inner 求两个dataframe的交集
  • outer 求两个dataframe的并集

二、判断某个dataframe中的元素是否在另一个dataframe里面

df_4 = df_1[(~df_1.pdb.isin(df_2.pdb))]

。。。。。

参考资料

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学