pandas 第三节 (merge用法)

本文介绍了pandas库中用于数据融合的两个关键方法——merge和join。join操作基于行索引进行,要求列名不重复,返回结果包含df1的所有行,df2的列如果不存在则用NaN填充。而merge则更接近关系型数据库的操作,通过列索引进行关联。此外,还提到了pandas的分组功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

df1

 

df2

join是按照行索引来关联操作,列名不能相同

df1.join(df2) #返回df1的行数,df1和df2的所有列名 值没有的话用NaN

merge是按照列索引来关联操作,和关系型数据库很相近

1. df1.merge(df2,on=0) #等价于df1.0=df2.0
    0  1_x   2   3   4  1_y
0  18   15  19  15  12   10
1  18   15  19  15  12   11
2  16   13  11  15  18   13
SELECT * FROM df1
JOIN df2 ON df1.[0]=df2.[0]
2. df1.merge(df2,left_on=3,right_on=0) #默认是inner
   0_x  1_x   2   3   4  0_y  1_y
0   11   18  12  18  14   18   10
1   11   18  12  18  14   18   11
SELECT * FROM df1
JOIN df2 ON df1.[3]=df2.[0]

3. df1.merge(df2,left_on=3,right_on=0,how="outer")
    0_x   1_x     2   3     4   0_y   1_y
0  18.0  15.0  19.0  15  12.0   NaN   NaN
1  16.0  13.0  11.0  15  18.0   NaN   NaN
2  10.0  16.0  15.0  14  16.0   NaN   NaN
3  11.0  18.0  12.0  18  14.0  18.0  10.0
4  11.0  18.0  12.0  18  14.0  18.0  11.0
5   NaN   NaN   NaN  19   NaN  19.0  10.0
6   NaN   NaN   NaN  16   NaN  16.0  13.0
SELECT * FROM df1 
FULL OUTER JOIN df2 on df1.[3]=df2.[0]

4. df1.merge(df2,left_on=3,right_on=0,how="left")
   0_x  1_x   2   3   4   0_y   1_y
0   18   15  19  15  12   NaN   NaN
1   10   16  15  14  16   NaN   NaN
2   11   18  12  18  14  18.0  10.0
3   11   18  12  18  14  18.0  11.0
4   16   13  11  15  18   NaN   NaN
SELECT * FROM df1 
LEFT JOIN df2 on df1.[3]=df2.[0]

5. df1.merge(df2,left_on=3,right_on=0,how="right")
    0_x   1_x     2    3     4   0_y   1_y
0   11.0  18.0   12.0   18   14.0   18   10
1   11.0  18.0   12.0   18   14.0   18   11
2   NaN   NaN   NaN  19   NaN   19   10
3   NaN   NaN   NaN  16   NaN   16   13
SELECT * FROM df1 
RIGHT JOIN df2 on df1.[3]=df2.[0]

 分组 group

grouped=df2.groupby([0]) #pandas.core.groupby.generic.DataFrameGroupBy

遍历分组
for i,j in grouped:
    print(type(i),type(j))
    print("$"*50)
    print(i)
    print("-"*50)
    print(j)
    print("*"*50

c=grouped.count()

select [0],count([1]),count([2]) 
from df2
group by [0]

 

在数据处理中,合并多个数据集是常见需求。Pandas库提供了concat和merge方法来实现这一功能。首先,我们可以通过concat方法将多个DataFrame水平方向或垂直方向合并。水平合并时,我们设置`axis=1`,这样就可以在指定位置添加数据列。例如: 参考资源链接:[Python DataFrame指定位置添加列的高效方法](https://wenku.csdn.net/doc/6412b4febe7fbd1778d418ee?spm=1055.2569.3001.10343) ```python import pandas as pd # 假设有两个DataFrame df1 = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]}) df2 = pd.DataFrame({'c': [7, 8, 9], 'd': [10, 11, 12]}) # 在df1的末尾合并df2 merged_df = pd.concat([df1, df2], axis=1) print(merged_df) ``` 如果需要在特定位置插入数据,可以先使用`insert()`方法创建一个空列,然后再通过concat进行合并: ```python # 在df1的第一列和第二列之间插入df2 df1.insert(loc=1, column='c', value=0) # 插入一个值为0的列,用于占位 df1 = pd.concat([df1.iloc[:, :1], df2, df1.iloc[:, 1:]], axis=1) print(df1) ``` 对于`merge()`方法,它可以实现基于一个或多个键将不同的DataFrame的行连接起来。`merge()`方法也可以用于在指定位置合并数据集,但它更适用于根据键值对齐数据。例如,可以指定合并的键和合并类型(如'left', 'right', 'outer', 'inner'): ```python # 假设有两个DataFrame,它们都有一个共同的键'key' df3 = pd.DataFrame({'key': [1, 2, 3], 'e': ['a', 'b', 'c']}) df4 = pd.DataFrame({'key': [2, 3, 4], 'f': ['d', 'e', 'f']}) # 使用merge方法在'key'上进行左合并 merged_df = pd.merge(df1, df3, on='key', how='left') print(merged_df) ``` 在实际应用中,根据数据集的大小和结构,选择合适的方法和参数至关重要,因为不同的合并策略可能会极大地影响到数据处理的效率和结果。为了深入理解这些方法和它们的应用,建议阅读《Python DataFrame指定位置添加列的高效方法》,其中详细介绍了这些技巧并提供了实践案例。 参考资源链接:[Python DataFrame指定位置添加列的高效方法](https://wenku.csdn.net/doc/6412b4febe7fbd1778d418ee?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值