python-3.x - pandas 合并数据长度
问题描述
我有两个数据框,每个数据框有一列具有相同的值(和相等的长度),但与简化示例中的顺序不同;
df1=pd.DataFrame(['a','b','c','d','e'],columns=['names'])
df2=pd.DataFrame(['b','e','a','c','d'],columns=['names'])
我想知道df2中df1中每一行的对应索引并执行;
df= pd.merge(df1.reset_index(), df2.reset_index(), on=['names'])
这有效,正如本例所预期的那样,数据帧的长度是相等的len(df1)=len(df2)=len(df)
但是在我的真实数据中, len(df1)=len(df2)=1714 和 len(df)=1676
我很疑惑,这怎么可能?
我刚刚做了一个实验并添加了重复项。
df1=pd.DataFrame(['e','a','b','c','d','e'],columns=['names'])
df2=pd.DataFrame(['b','e','a','e','c','d'],columns=['names'])
df= pd.merge(df1.reset_index(), df2.reset_index(), on=['names'])
这使得 len(df)=8 大于 len(df1)=len(df2)=6。
但在我的真实数据中,df 小于单个 df 长度。
解决方案
由于pandas
merge
默认是inner join,当你不指定方法时how
,它只会输出两个dfs中的行
例如 :
df1=pd.DataFrame(['a'],columns=['names'])
df2=pd.DataFrame(['b','e','a','c','d'],columns=['names'])
pd.merge(df1.reset_index(), df2.reset_index(), on=['names'])
index_x names index_y
0 0 a 2
更新
df1=pd.DataFrame(['a','a'],columns=['names'])
df2=pd.DataFrame(['b','e','a','a','c','d'],columns=['names'])
df1.merge(df2)
names
0 a
1 a
2 a
3 a
推荐阅读
- flutter - 使文本连续可点击,并处理溢出
- bootstrap-4 - 这个声明是什么意思“我们强烈推荐自定义验证样式,因为本机浏览器默认值不会向屏幕阅读器宣布”?
- node.js - 如何在这个nodejs代码中执行和处理promise?(用户前后的排行榜排名)
- sql - SQL Server 每月最后一天
- safari - 终端停止连接到 Safari
- react-native - 在设备上构建和安装应用程序(cd android && ./gradlew installDebug)
- python - 我需要从命令行验证参数
- cordova - Ionic 不构建 android 项目
- python - 使用python中的plotly方法在y轴刻度中添加货币符号
- go - 如何从公用文件夹发回 Go 中的图像?