循环遍历一个Pandas列来匹配值与另一个数据帧的索引

2024-09-30 10:31:25 发布

您现在位置:Python中文网/ 问答频道 /正文

Exp是一个DataFrame和{}object

           Exp
0   1989-06-01
1   1989-07-01
2   1989-08-01
3   1989-09-01
4   1989-10-01

CLDataframe,其中IndexDateTime Object

^{pr2}$
  • 我想将新列R添加到CL的dataframe中,该数据框的datefrom Exp与CL索引匹配。在

这就是我想要的输出结果

                   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: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

有人能帮帮我吗?我经常收到这个值错误


Tags: 数据indataframefordatetimeindexobjectcl
2条回答

^{}
join专注于通过索引组合数据帧/序列。
Exp和{}一起使用set_index在数据帧本身和索引中保持相同的信息。我们把它放在索引中以方便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

设置

^{pr2}$

编辑:更新评论人建议。在

您需要执行左连接:

Exp = pd.DataFrame(
    pd.to_datetime(['1989-06-01', '1989-07-01', '1989-08-01', '1989-09-01', '1989-10-01']),
    columns=['Exp'])

给出:

^{pr2}$

以及

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

因为循环数据帧不是熊猫做事的方式。在

相关问题 更多 >

    热门问题