python - 如果多个匹配“on”并保持匹配直到某一点,则合并而不丢失行并且不重复?
问题描述
所以这就是我想要做的:
df1
symbol qty
0 DA 400
1 IND 30
2 FY 1200
3 SHTV 8
4 HIN 40
5 NM 8
6 GRI 400
7 PN 7000
df2
tsym symbol quantity
PN35 PN -3500
FY10 FY -100
FY15 FY -300
PN34 PN -3500
当我合并它们时
posdf1 = pd.merge(df2,df1,how='outer',on='symbol')
我得到的输出:
posdf1
tsym symbol quantity qty
PN35 PN -3500 7000
FY10 FY -100 1200
FY15 FY -300 1200
PN34 PN -3500 7000
我正在尝试找到一种方法来获得以下输出 2 种类型的输出:
posdf1
tsym symbol quantity qty
PN35 PN -3500 3500
FY10 FY -100 100
FY15 FY -300 300
PN34 PN -3500 3500
第二种情况如果:
df2
tsym symbol quantity
PN35 PN -7000
FY10 FY -1200
FY15 FY -1200
PN34 PN -7000
然后是所需的输出:
posdf1
tsym symbol quantity qty
PN35 PN -7000 7000
FY10 FY -1200 1200
FY15 FY -300 NaN
PN34 PN -7000 NaN
我可以遍历数据框并得到我认为的上述结果。我只是想弄清楚这里是否可以使用merge
或其他一些技巧。pandas
提前致谢
解决方案
因此,看起来您描述的两个用例都没有使用来自的数据df1
。给定数据框
df2=pd.DataFrame({'tsym':['PN35','FY10','FY15','PN34'],
'symbol':['pn','fy','fy','pn'],
'quantity':[-3500,-100,-300,-3500]})
tsym symbol quantity
0 PN35 pn -3500
1 FY10 fy -100
2 FY15 fy -300
3 PN34 pn -3500
对于第一种情况:
df2['qty']=df2['quantity'].abs()
tsym symbol quantity qty
0 PN35 pn -3500 3500
1 FY10 fy -100 100
2 FY15 fy -300 300
3 PN34 pn -3500 3500
其次,您可以制作一个临时groupby().first()
df 并将其合并回原始文件:
df2=pd.DataFrame({'tsym':['PN35','FY10','FY15','PN34'],
'symbol':['pn','fy','fy','pn'],
'quantity':[-7000,-1200,-1200,-7000]})
df3=df2.groupby('symbol').first().reset_index()
df3['qty']=df3['quantity'].abs()
df2=df2.merge(df3,how='outer')
df2
tsym symbol quantity qty
0 PN35 pn -7000 7000.0
1 FY10 fy -1200 1200.0
2 FY15 fy -1200 NaN
3 PN34 pn -7000 NaN
推荐阅读
- react-native - BottomTabNavigator 未出现在屏幕底部
- android - 直接从 fresco 的管道中获取中心裁剪的图像
- pytorch - pytorch customdataset notimplemented错误
- javascript - Angular,使用基于父组件的短组件选择器
- python - Tensorflow 子类模型中的后续迭代返回无类型“缓存”张量
- java - 为返回所有数据但不包括某些列的本机查询重用实体的方法
- arrays - 比较两个数组并删除不在另一个数组中的数据
- sympy - sympyfourier_series 中是否有错误?
- python - 扫描关键字的 url 列表
- c# - 无法将商店中安装的证书用作服务器端证书