具有相同大小和索引的数据帧相乘

时间:2019-11-06 08:26:35

标签: python pandas

我有一个问题,将2个数据帧与相同数量的列和行相乘。两者都填充有float64数据类型。它输出一个空的数据框。请提供任何帮助。

pos数据框:

          2019-03-01    2019-03-02    2019-03-03    
currency                                                                                                                                  
1WO       2.600000e+02  2.600000e+02  2.600000e+02  
ADH       8.219730e+02  8.219730e+02  8.219730e+02

c_price数据框:

timestamp      2019-03-01  2019-03-02  2019-03-03  
currency                                                                                                                                                       
1WO            1.8140      1.7230      1.7250      
ADH            0.2425      0.2465      0.2387

我的代码:

jpy_bal = pos * c_price 
两个df的

df.columns.dtype输出:

object
两个df的

df.dtypes输出:

2019-03-01    float64
2019-03-02    float64
2019-03-03    float64
2019-03-04    float64
2019-03-05    float64
           ...   
2019-11-01    float64
2019-11-02    float64
2019-11-03    float64
2019-11-04    float64
2019-11-05    float64
Length: 250, dtype: object

2 个答案:

答案 0 :(得分:0)

您可以这样做:

jpy_bal = pd.DataFrame(pos.values * c_price.values, columns=pos.columns, index=pos.index)

答案 1 :(得分:0)

我认为列中有不同的dtype:

print (pos.columns.dtype) 
print (c_price.columns.dtype)

因此需要将它们转换为相同的dtype,在此列中DatetimeIndex

pos.columns = pd.to_datetime(pos.columns)
c_price.columns = pd.to_datetime(c_price.columns)
jpy_bal = pos * c_price

另一个问题应该是索引值不同-可能是尾随空白:

pos.index = pod.index.str.strip()
c_price.index = c_price.index.str.strip()

另一个想法是通过numpy数组进行多次运算:

jpy_bal = pos * c_price.values 

或者:

jpy_bal = pos.values * c_price
print (jpy_bal)
     2019-03-01  2019-03-02  2019-03-03
1WO  471.640000  447.980000  448.500000
ADH  199.328452  202.616344  196.204955