python - 从不同大小的数据框中复制数据,有条件
问题描述
我有 2 个不同大小的数据帧 df1-df2(df2 的行和列比 df1 多)。
df1
unit rate
aa nan
cc nan
df2
unit date rate type
aa 1 100 x1
bb 2 150 x2
cc 3 200 x3
dd 4 250 x4
我正在尝试将 df2['rate'] 中的值分配给 df1['rate'],在 df1['unit'] == df2['unit'] 的行中。
所需的输出是
df1
unit rate
aa 100
cc 200
我尝试了不同的方法:
df1['rate'] = df2.loc[(df2['unit'].reset_index(drop=True) == df1['unit']), 'rate']
给我 ValueError: Can only compare the same-labeled Series objects
df1['rate'] = df2.loc[(df2['unit'].reset_index(drop=True).str == df1['unit'].str), 'rate']
给我假
我认为这是因为这两个数据框的大小不同。但是我不明白为什么它应该阻止它进行比较。我不知道如何从这里开始。
解决方案
您可以使用“合并”:
dfm = df1.merge(df2, left_on='unit', right_on='unit')
dfm = dfm.drop(columns=['date','type','rate_x'])
dfm = dfm.rename(columns={"rate_y": "rate"})
print(dfm)
unit rate
0 aa 100
1 cc 200
推荐阅读
- php - 如何在 cURL 中管理带有特殊字符的 URL?
- python - Django_filter - 将 slug 从 views.py 函数传递给 filters.py 类
- firebase - 将 quasar v2 ssr 应用程序部署到 firebase 函数中
- elasticsearch - 如何在 Elasticsearch 中聚合之前进行排序?
- c# - HttpClient - 收到的消息是意外的或格式错误
- angular - 将复选框值传递给 Html - Angular 11
- lwc - 当我们从产品列表中选择产品时,如何使用数据表显示模态?
- python - 使用 pandas 替换多列中的值的优雅而有效的方法
- mysql - 更新时如何防止重复输入键
- javascript - 使用(猫鼬)在模式中无法正常工作的约束