使用python为选定的数据帧单元格设置值
我有两个python数据帧,使用python为选定的数据帧单元格设置值,python,pandas,Python,Pandas,我有两个python数据帧,df1和df2,当我试图将一些值从df2传递到df1时遇到问题 df1如下 Datetime Events 2009-06-25 AAA; 2009-09-29 BBB; 2009-10-20 CCC; df2如下 Datetime History 2009-07-25 2009-09-30
df1
和df2
,当我试图将一些值从df2
传递到df1
时遇到问题
df1
如下
Datetime Events
2009-06-25 AAA;
2009-09-29 BBB;
2009-10-20 CCC;
df2
如下
Datetime History
2009-07-25
2009-09-30
2009-10-21
我试图做的是每当df2.datetime
晚于相应的df1.datetime时,将df1['events']
中的事件字符串附加到df2['History']
。例如,我希望df2
成为
Datetime History
2009-07-25 AAA;
2009-09-30 AAA; BBB;
2009-10-21 AAA; BBB; CCC;
我尝试了以下理解:
[df2[df2['Datetime']>time['Datetime']].loc['History']+=time['Events'] for idx, time in df1.iterrows()]
但是得到了错误消息
指向“+=”的“无效语法”(当我将“+=”替换为“=”时出现相同的错误消息)
您可以帮助吗?Thx.您可以使用cumsum
计算事件,直到df1
上的一行,然后使用将df1
中的最新日期映射到df2
中的相应日期:
df1.Datetime = pd.to_datetime(df1.Datetime)
df2.Datetime = pd.to_datetime(df2.Datetime)
df1.Events = df1.Events.cumsum()
pd.merge_asof(df2, df1, on="Datetime").rename(columns={"Events": "History"})
# Datetime History
#0 2009-07-25 AAA;
#1 2009-09-30 AAA;BBB;
#2 2009-10-21 AAA;BBB;CCC;
谢谢你的评论。但是,在我的例子中,df1.datetime不同于df2.datetime。上面给出的df1和df2被简化了。实际上,df2中有多行的datetime位于df1的下两行之间。因此这两行可能不容易合并。如果df2中有多行位于df1中的两行之间,那么它们将得到相同的值。这不是您所需要的吗?感谢您的解决方案,它工作得非常好。同时,是否可以让我知道我原来的解决方案中的错误?