python - 根据标准匹配将数据从数据帧的早期部分传输到后面的部分
问题描述
好的,我试图解决这个问题,但我做不到,我找不到任何其他类似的问题......
使用 pandas 和数据框,我需要根据匹配值匹配数据框早期部分的数据,并将其放入数据框的后面部分。数据如下所示:
nc Date oldval lor
508 508 2019-07-08 296.820007 500
509 509 2019-07-17 297.73999 502
510 510 2019-07-19 297.170013 502
511 511 2019-07-25 300 504
512 512 2019-08-05 283.820007 505
513 513 2019-08-12 288.070007 506
514 514 2019-08-14 283.899994 506
515 515 2019-08-23 284.850006 507
516 516 2019-09-03 290.73999 508
517 517 2019-09-16 300.160004 510
518 518 2019-09-24 295.869995 511
519 519 2019-09-27 295.399994 511
520 520 2019-10-02 288.059998 512
521 521 2019-10-08 288.529999 513
522 522 2019-10-18 297.970001 514
523 523 2019-11-21 310.269989 518
524 524 2019-12-03 309.549988 520
我需要做的是查看“lor”列,将其与“nc”列上的所有先前行进行比较,如果“nc”具有匹配值,则将日期放入新列“xDate”和'oldval' 到与 'lor' 位于同一行的新列 'xval' 中。'nc' 列中的数字将是唯一的并且值会增加,而 'lor' 列中的数字可能重复也可能不重复。
最终数据应如下所示:
nc Date oldval lor xdate xval
508 508 2019-07-08 296.820007 500 np.nan np.nan
509 509 2019-07-17 297.73999 502 np.nan np.nan
510 510 2019-07-19 297.170013 502 np.nan np.nan
511 511 2019-07-25 300 504 np.nan np.nan
512 512 2019-08-05 283.820007 505 np.nan np.nan
513 513 2019-08-12 288.070007 506 np.nan np.nan
514 514 2019-08-14 283.899994 506 np.nan np.nan
515 515 2019-08-23 284.850006 507 np.nan np.nan
516 516 2019-09-03 290.73999 508 2019-07-08 296.820007
517 517 2019-09-16 300.160004 510 2019-07-19 297.170013
518 518 2019-09-24 295.869995 511 2019-07-25 300
519 519 2019-09-27 295.399994 511 2019-07-25 300
520 520 2019-10-02 288.059998 512 2019-08-05 283.820007
521 521 2019-10-08 288.529999 513 2019-08-12 288.070007
522 522 2019-10-18 297.970001 514 2019-08-14 283.899994
523 523 2019-11-21 310.269989 518 2019-09-24 295.869995
524 524 2019-12-03 309.549988 520 2019-10-02 288.059998
解决方案
您可以使用apply
来查找匹配值,然后将它们转换为带有apply(pd.Series)
.
s = df['lor'].apply(lambda x: df.loc[df['nc'] == x, ['Date', 'oldval']].values).explode()
df[['xdate','xval']] = s.apply(pd.Series)
推荐阅读
- python - 在对象中查找矩形的轮廓
- ruby - Ruby net/http PUT 请求中的流式数据
- powershell - 如何在 PowerShell Core (pwsh) 中查找或安装缺少的命令?
- javascript - 单击多个元素相同的类名
- python - 在循环中在python中传递多个参数
- php - 如何在symfony中显示数组关系ManyToMany
- java - VS 中的发布模式和调试模式
- reactjs - 通过 react-helmet 添加脚本标签时如何忽略 TypeScript 错误?
- javascript - 正则表达式检查具有最小值和最大值的总位数
- yii2 - 使用 Cloudflare 背后的 Yii2 访问规则来限制 ips 的操作