【发布时间】:2021-02-24 17:26:06
【问题描述】:
我有两个数据框,df1 和 df2,我想从 df1 子结构 df2 并使用特定列“代码”作为行比较
import pandas as pd
import numpy as np
rng = pd.date_range('2021-01-01', periods=10, freq='D')
df1 = pd.DataFrame(index=rng, data={'Val1': range(10), 'Val2': np.array(range(10))*5, 'Code': [1, 1, 1, 2, 2, 2, 3, 3, 3, 3]})
df2 = pd.DataFrame(data={'Code': [1, 2, 3, 4], 'Val1': [10, 5, 15, 20], 'Val2': [4, 8, 10, 7]})
df1:
Val1 Val2 Code
2021-01-01 0 0 1
2021-01-02 1 5 1
2021-01-03 2 10 1
2021-01-04 3 15 2
2021-01-05 4 20 2
2021-01-06 5 25 2
2021-01-07 6 30 3
2021-01-08 7 35 3
2021-01-09 8 40 3
2021-01-10 9 45 3
df2:
Code Val1 Val2
0 1 10 4
1 2 5 8
2 3 15 10
3 4 20 7
我使用以下代码:
df = (df1.set_index(['Code']) - df2.set_index(['Code']))
结果是
Code
1 -10.0 -4.0
1 -9.0 1.0
1 -8.0 6.0
2 -2.0 7.0
2 -1.0 12.0
2 0.0 17.0
3 -9.0 20.0
3 -8.0 25.0
3 -7.0 30.0
3 -6.0 35.0
4 NaN NaN
但是,我只想获取 df1 中的行的结果,而不是缺少的键,在本例中为 4。
我该怎么做,然后将索引从 df1 设置回原始索引?
类似的东西,但它不起作用:
df = (df1.set_index(['Code']) - df2.set_index(['Code'])).set_index(df1['Code'])
我还想保留列的标题。
期望的输出:
Val1 Val2 Code
Date
2021-01-01 -10.0 -4.0 1
2021-01-02 -9.0 1.0 1
2021-01-03 -8.0 6.0 1
2021-01-04 -2.0 7.0 2
2021-01-05 -1.0 12.0 2
2021-01-06 0.0 17.0 2
2021-01-07 -9.0 20.0 3
2021-01-08 -8.0 25.0 3
2021-01-09 -7.0 30.0 3
2021-01-10 -6.0 35.0 3
【问题讨论】:
-
你能添加你想要的结果吗?这将使我们更轻松地为您提供所需的服务。
标签: python python-3.x pandas dataframe