2017-06-29 53 views
0

我有兩個python熊貓數據框,df1df2,並且當我試圖將一些值從df2傳遞到df1時遇到了問題。使用python設置選定數據框單元格的值

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    

什麼,我試圖做的是在df1['Events']事件字符串追加到df2['History']每當df2.datetime比對應df1.datetime後。 。E.克,我希望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()] 

,但得到錯誤味精

'無效語法' 指向「+ = '(即使我用'='取代'+ ='也是一樣的錯誤信息。

你能幫忙嗎? HX。

回答

1

您可以使用cumsum來計算df1的事件多達一排,然後用merge_asofdf1最新日期映射到對應的日期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; 
+0

感謝您的意見。然而,就我而言,df1.datetime與df2.datetime不同。上面給出的df1和df2被簡化了。實際上df2中實際上有多行,其日期時間位於df1的下兩行之間。所以這兩個可能不容易合併。 –

+0

如果df2中有多於一行的數據位於df1中的兩行之間,則它們將獲得相同的值。這不是你需要的嗎? – Psidom

+0

感謝您的解決方案,它工作得很好。同時,是否有可能讓我知道我的原始解決方案中出了什麼問題? –

相關問題