英文:
Change dataframe values based on other dataframes
问题
假设我们有名为“df1”的数据框,其列名为城市:
纽约 洛杉矶 罗马 伦敦 米兰
日期
2023-01-01 1 81 26 55 95
2023-01-02 92 42 96 98 7
2023-01-03 14 4 60 88 73
在另一个名为“df2”的数据框中,我有城市及其所属国家:
城市 国家
0 纽约 美国
1 洛杉矶 美国
2 伦敦 英国
3 罗马 意大利
4 米兰 意大利
在第三个名为“df3”的数据框中,我有每个国家和每个日期的一些值:
美国 英国 意大利
日期
2023-01-01 70 41 32
2023-01-02 98 46 45
2023-01-03 83 50 17
我的输出数据框与第一个数据框具有相同的结构。这是预期输出:
纽约 洛杉矶 罗马 伦敦 米兰
日期
2023-01-01 -69 11 -6 14 63
2023-01-02 -6 -56 51 52 -38
2023-01-03 -69 -79 43 38 56
例如,2023-01-02的“罗马”的值为51,这是df1中相同单元格的值(96)与“罗马”所在国家(意大利)在2023-01-02的值(45)之间的差异。
英文:
Let's say we have the following "df1" dataframe with cities as column names:
NY LA Rome London Milan
date
2023-01-01 1 81 26 55 95
2023-01-02 92 42 96 98 7
2023-01-03 14 4 60 88 73
In another "df2" dataframe I have cities and their countries:
City Country
0 NY US
1 LA US
2 London UK
3 Rome Italy
4 Milan Italy
In a third "df3" dataframe I have some values for each country and each date:
US UK Italy
date
2023-01-01 70 41 32
2023-01-02 98 46 45
2023-01-03 83 50 17
My output dataframe has the same strutcture as the first dataframe. This is the expected output:
NY LA Rome London Milan
date
2023-01-01 -69 11 -6 14 63
2023-01-02 -6 -56 51 52 -38
2023-01-03 -69 -79 43 38 56
For example, the 51 value for "Rome" on 2023-01-02 is the difference between the value of the same cell from df1 (96) and the value of the country where Rome is located (Italy) on 2023-01-02 (45).
Any help? Thanks.
答案1
得分: 2
尝试堆叠df3
,与df2
合并以获取正确的城市数据,然后可以进行如下操作:
df1.sub(df3.stack().reset_index(name='value')
.merge(df2, left_on='level_1', right_on='Country')
.pivot(index='date', columns='City', values='value')
)
输出:
洛杉矶 伦敦 米兰 纽约 罗马
日期
2023-01-01 11 14 63 -69 -6
2023-01-02 -56 52 -38 -6 51
2023-01-03 -79 38 56 -69 43
英文:
Try stack df3
, merge it with df2
to get the correct data for the cities, then you can sub:
df1.sub(df3.stack().reset_index(name='value')
.merge(df2, left_on='level_1', right_on='Country')
.pivot(index='date', columns='City', values='value')
)
Output:
LA London Milan NY Rome
date
2023-01-01 11 14 63 -69 -6
2023-01-02 -56 52 -38 -6 51
2023-01-03 -79 38 56 -69 43
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论