簡體   English   中英

添加兩個帶有日期和浮點數的pandas DataFrame

[英]Add two pandas DataFrame with dates and float

我有兩個看起來像這樣的數據幀:

         date  bin   value
0 2013-11-01   100   1
1 2013-12-01   200   1

         date  bin   value
0 2013-11-01   100   2
1 2013-12-01   300   5
2 2013-10-01   100   10

我想找到每個日期和bin的值總和,即最終數據框應為:

         date  bin   value
0 2013-11-01   100   3
1 2013-12-01   200   1
2 2013-12-01   300   15
3 2013-10-01   100   10

(索引和順序並不重要)

當我嘗試:

df.add(df2, fill_value = 0)

但我收到以下錯誤:

 TypeError: ufunc add cannot use operands with types dtype('O') and dtype('<M8[ns]')

我也嘗試過使用MultiIndex,但之后卻沒有設置雙精度(日期,bin)索引。

任何想法如何使其工作?

您確實可以通過將這兩列(日期和bin)設置為多索引來做到這一點,然后使用add指定填充值(否則將獲得NaN):

In [65]: df1b = df1.set_index(['date', 'bin'])

In [66]: df2b = df2.set_index(['date', 'bin'])

In [67]: df1b + df2b
Out[67]:
                value
date       bin
2013-10-01 100    NaN
2013-11-01 100      3
2013-12-01 200    NaN
           300    NaN

In [68]: df1b.add(df2b, fill_value = 0)
Out[68]:
                value
date       bin
2013-10-01 100     10
2013-11-01 100      3
2013-12-01 200      1
           300      5

另一個選擇是連接兩個框架,然后按兩列date和bin分組:

In [71]: df = pd.concat([df1, df2], ignore_index=True)

In [72]: df
Out[72]:
         date  bin  value
0  2013-11-01  100      1
1  2013-12-01  200      1
2  2013-11-01  100      2
3  2013-12-01  300      5
4  2013-10-01  100     10

In [73]: df.groupby(['date', 'bin']).sum()
Out[73]:
                value
date       bin
2013-10-01 100     10
2013-11-01 100      3
2013-12-01 200      1
           300      5

您收到上述錯誤消息的原因是,顯然df1df2某個列的dtypes不匹配。 但是無論如何,僅添加兩個數據幀是行不通的,因為您無法添加日期時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM