python - 移动数据帧索引以匹配另一个数据帧
问题描述
我有两个数据框。我正在尝试用另一个数据框更新一个数据框。
df1
好像:
col2 col3 dept
date
2020-05-08 29 21 A
2020-05-09 56 12 B
2020-05-10 82 15 C
2020-05-11 13 9 D
2020-05-12 35 13 E
2020-05-13 53 87 F
2020-05-14 25 9 G
2020-05-15 23 63 H
看起来df2
像:
col2 dept
date
2020-05-08 64 A
2020-05-09 41 B
2020-05-10 95 C
2020-05-11 58 D
2020-05-12 89 E
2020-05-13 37 F
2020-05-14 24 G
2020-05-15 67 H
df1
当两个数据框的索引中的日期匹配时,我可以df2
毫无问题地更新:
df1 = df1.set_index('dept', append=True)
df2 = df2.set_index('dept', append=True)
df1.update(df2)
df1 = df1.reset_index(level='dept')
df2 = df2.reset_index(level='dept')
以上将 dept 带入索引,我更新df1
为df2
因此col2
indf1
更新为:
dept col2 col3
date
2020-05-07 A 64 21
2020-05-08 B 41 12
2020-05-09 C 95 15
2020-05-10 D 58 9
2020-05-11 E 89 13
2020-05-12 F 37 87
2020-05-13 G 24 9
2020-05-14 H 67 63
但是 - 当索引日期不同时,例如当 df2 看起来像:
col2 dept
date
2020-05-07 64 A
2020-05-08 41 B
2020-05-09 95 C
2020-05-10 58 D
2020-05-11 89 E
2020-05-12 37 F
2020-05-13 24 G
2020-05-14 67 H
使用上面的代码df1
不会使用来自 的值进行更新df2
。当索引不同时,如何使用另一个数据框更新日期框?一个解决方案是使日期与 thendf2
相同df1
(但你将如何做到这一点)。
解决方案
您想df1
从df2
索引(date
和dept
)的组合上进行更新。
仅当您在数据帧中具有匹配的索引时,您的相同代码才能正常工作。
df1 之后的索引df1 = df1.set_index('dept', append=True)
是:
In [160]: df1.index.tolist()
Out[160]:
[('2020-05-08', 'A'),
('2020-05-09', 'B'),
('2020-05-10', 'C'),
('2020-05-11', 'D'),
('2020-05-12', 'E'),
('2020-05-13', 'F'),
('2020-05-14', 'G'),
('2020-05-15', 'H')]
以你的第二个df2
为例。df2
之后的索引df2 = df2.set_index('dept', append=True)
是:
In [159]: df2.index.tolist()
Out[159]:
[('2020-05-07', 'A'),
('2020-05-08', 'B'),
('2020-05-09', 'C'),
('2020-05-10', 'D'),
('2020-05-11', 'E'),
('2020-05-12', 'F'),
('2020-05-13', 'G'),
('2020-05-14', 'H')]
您可以看到两个数据帧的索引对于任何行都不匹配。因此,它没有更新。如果您有匹配的索引,您将从代码本身获得所需的输出。
推荐阅读
- typescript - 如何在 Firebase 中使用 UserMetadata 和其他类型
- javascript - 是否可以在服务器外邀请使用 Discord.js 的人?
- python - list 和 char 内存分配的区别
- azure-databricks - 如何解决 ImportError:没有名为“azureml”的模块,我正在使用 Azure databricks 笔记本
- sql - 如何在mysql中使用count和order by与inner join?
- python - 点击后如何获取url以了解它是否有404错误或使用selenium Firefox python将文件下载到首选位置
- angular - 使用 Ionic 自动汇总输入到 ngFor 中的数据
- android - 如何使exoplayer的控制器背景透明?
- android-studio - 设计 Android 开发者屏幕尺寸
- django - 如何获取 ModelForm 中字段的实例值?