Python pandas,数据合并,join(),merge()

join():根据行的相同索引合并。

merge():根据条件(列的值)合并,类似数据库中的多表查询(内连接,左连接,外连接)

 

 

demo.py(数据合并,根据行的索引合并,join()):

# coding=utf-8
import numpy as np
import pandas as pd

# 创建DataFrame
df1 = pd.DataFrame(np.arange(12, 24).reshape((3, 4)), index=["a", "b", "c"], columns=["WW", "XX", "YY", "ZZ"])
print(df1)
'''
   WW  XX  YY  ZZ
a  12  13  14  15
b  16  17  18  19
c  20  21  22  23
'''
# 创建DataFrame
df2 = pd.DataFrame(np.arange(50, 62).reshape((4, 3)), index=["a", "b", "c", "e"], columns=["RR", "SS", "TT"])
print(df2)
'''
   RR  SS  TT
a  50  51  52
b  53  54  55
c  56  57  58
e  59  60  61
'''


# 数据合并 join
df3 = df1.join(df2)  # 默认根据相同的行索引合并。 df3与df1的行索引一致
print(df3)
'''
   WW  XX  YY  ZZ  RR  SS  TT
a  12  13  14  15  50  51  52
b  16  17  18  19  53  54  55
c  20  21  22  23  56  57  58
'''

# 数据合并 join
df4 = df2.join(df1)  # df4与df2的行索引一致。 如果对应的列索引不存在,就填充NaN
print(df4)
'''
   RR  SS  TT    WW    XX    YY    ZZ
a  50  51  52  12.0  13.0  14.0  15.0
b  53  54  55  16.0  17.0  18.0  19.0
c  56  57  58  20.0  21.0  22.0  23.0
e  59  60  61   NaN   NaN   NaN   NaN
'''

demo.py(数据合并,根据列的值合并,merge()):

# coding=utf-8
import numpy as np
import pandas as pd

# 创建DataFrame
df1 = pd.DataFrame(np.arange(12, 24).reshape((3, 4)), index=["a", "b", "c"], columns=["WW", "XX", "YY", "ZZ"])
print(df1)
'''
   WW  XX  YY  ZZ
a  12  13  14  15
b  16  17  18  19
c  20  21  22  23
'''
# 创建DataFrame
df2 = pd.DataFrame(np.arange(12, 24).reshape((4, 3)), index=["a", "b", "c", "e"], columns=["RR", "SS", "TT"])
print(df2)
'''
   RR  SS  TT
a  12  13  14
b  15  16  17
c  18  19  20
e  21  22  23
'''


# 根据列的值合并。  笛卡尔积中如果"YY"列的值和"TT"列的值相等,那么就合并。  inner内连接(默认) outer外连接 left左连接 right右连接
df3 = df1.merge(df2, left_on="YY", right_on="TT", how="inner")
# df3 = pd.merge(df1, df2, left_on="YY", right_on="TT")  # 等同上一句
print(df3)
'''
   WW  XX  YY  ZZ  RR  SS  TT
0  12  13  14  15  12  13  14
'''
# 如果df1某行的"YY"列为10,df2中的"TT"列为10的有多行,那么都会成功匹配合并。


# 根据列的值合并。  left_on表示df1的列,right_on表示df2的列。  outer外连接(NaN补齐)
df4 = df1.merge(df2, left_on="YY", right_on="TT", how="outer")
print(df4)
'''
     WW    XX    YY    ZZ    RR    SS    TT
0  12.0  13.0  14.0  15.0  12.0  13.0  14.0
1  16.0  17.0  18.0  19.0   NaN   NaN   NaN
2  20.0  21.0  22.0  23.0   NaN   NaN   NaN
3   NaN   NaN   NaN   NaN  15.0  16.0  17.0
4   NaN   NaN   NaN   NaN  18.0  19.0  20.0
5   NaN   NaN   NaN   NaN  21.0  22.0  23.0
'''


# df5 = df1.merge(df2, on="YY")  # 如果df1和df2中都有"YY"列,那么可以直接on="YY"

 

 

你可能感兴趣的:(Python+)