![](/img/trans.png)
[英]Pandas df. Match values of a column from one dataframe with a values from a column from another dataframe
[英]Looping over one pandas column to match values with index of another dataframe
Exp
是一个带有datetime
object
DataFrame
Exp
0 1989-06-01
1 1989-07-01
2 1989-08-01
3 1989-09-01
4 1989-10-01
CL
是具有Index
作为DateTime Object
的数据Dataframe
CL
1989-06-01 68.800026
1989-06-04 68.620026
1989-06-05 68.930023
1989-06-06 68.990021
1989-06-09 69.110023
R
添加到CL
数据框中,该数据将具有与CL
索引匹配的Exp中的日期。 这是我想要的输出应该看起来像
CL R
1989-06-01 68.800026 1989-06-01
1989-06-04 68.620026
1989-06-05 68.930023
1989-06-06 68.990021
1989-06-09 69.110023
这是我尝试做的:
for m in Exp.iloc[:,0]:
if m == CL.index:
CL['R'] = m
ValueError:具有多个元素的数组的真值不明确。 使用a.any()或a.all()
有人可以帮帮我吗 ? 我多次收到此ValueError
编辑 :更新了评论者的建议。
您需要做LEFT JOIN:
Exp = pd.DataFrame(
pd.to_datetime(['1989-06-01', '1989-07-01', '1989-08-01', '1989-09-01', '1989-10-01']),
columns=['Exp'])
得到:
Exp
0 1989-06-01
1 1989-07-01
2 1989-08-01
3 1989-09-01
4 1989-10-01
和
CL = pd.DataFrame(
[68.800026, 68.620026, 68.930023, 68.990021, 69.110023],
index = pd.to_datetime(['1989-06-01', '1989-06-04', '1989-06-05', '1989-06-06', '1989-06-09']),
columns = ['CL'])
给
CL
1989-06-01 68.800026
1989-06-04 68.620026
1989-06-05 68.930023
1989-06-06 68.990021
1989-06-09 69.110023
然后:
(CL
.reset_index()
.merge(Exp, how='left', right_on='Exp', left_on='index')
.set_index('index')
.rename(columns={'Exp': 'R'}))
返回您正在寻找的东西
CL R
index
1989-06-01 68.800026 1989-06-01
1989-06-04 68.620026 NaN
1989-06-05 68.930023 NaN
1989-06-06 68.990021 NaN
1989-06-09 69.110023 NaN
因为遍历数据框不是熊猫的工作方式。
pd.DataFrame.join
join
重点是通过索引组合数据框/系列。
在Exp
set_index
与drop=False
一起使用,以使数据帧中的相同信息正确并保留索引。 我们将其放入索引中以方便join
。
CL.join(Exp.set_index('Exp', drop=False)).rename(columns=dict(Exp='R'))
CL R
1989-06-01 68.800026 1989-06-01
1989-06-04 68.620026 NaT
1989-06-05 68.930023 NaT
1989-06-06 68.990021 NaT
1989-06-09 69.110023 NaT
设定
Exp = pd.DataFrame(dict(
Exp=pd.to_datetime(
['1989-06-01', '1989-07-01', '1989-08-01', '1989-09-01', '1989-10-01'])
))
CL = pd.DataFrame(dict(
CL=[68.800026, 68.620026, 68.930023, 68.990021, 69.110023],
), pd.to_datetime(
['1989-06-01', '1989-06-04', '1989-06-05', '1989-06-06', '1989-06-09']))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.