numpy,将数据帧乘以数字输出NaN

时间:2019-10-05 17:03:39

标签: python python-3.x pandas numpy

我正在尝试将数据框1的列a乘以数据框2的列b。

combineQueryandBookFiltered['pnlValue'] = np.multiply(combineQueryandBookFiltered['pnlValue'], df_fxrate['fx_rate'])

pnlValue列有很多数字,而fx_rate列只是一个数字。

代码已执行,但最终结果以大量NaN结尾。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

-嗨,好极了,

您有不能使用简单列乘法的原因吗?

df['C'] = df['A'] * df['B']

如前所述,两个序列的相乘是基于它们的索引,并且您的fx_rate系列可能没有与pnlValue系列相同的索引。

但是由于您的fx_rate仅为一个值,因此建议您将数据帧乘以标量:

fx_rate = df_fxrate['fx_rate'].iloc[0]
combineQueryandBookFiltered['pnlValue'] = combineQueryandBookFiltered['pnlValue'] * fx_rate

答案 1 :(得分:2)

这可能是由于数据框的索引所致。您需要使用<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".ph"> <TextView android:id="@+id/phlevelinfo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="30dp" android:text="Displaying pH Level" android:textSize="30sp" tools:ignore="HardcodedText" /> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="30dp" /> </LinearLayout>

df_fxrate['fx_rate'].values

或更好:

combineQueryandBookFiltered['pnlValue'] = np.multiply(combineQueryandBookFiltered['pnlValue'], df_fxrate['fx_rate'].values)

我给你看一个例子:

combineQueryandBookFiltered['pnlValue']=combineQueryandBookFiltered['pnlValue']*df_fxrate['fx_rate'].values

df1=pd.DataFrame(index=[1, 2])
df2=pd.DataFrame(index=[0])
df1['col1']=[1,1]
print(df1)

 col1
1     1
2     1

df2['col1']=[1]
print(df2)

   col1
0     1

如您所见,乘法是根据索引完成的

  

所以您需要这样的东西:

print(np.multiply(df1['col1'],df2['col1']))

0   NaN
1   NaN
2   NaN

np.multiply(df1['col1'],df2['col1'].values)

输出:

df1['col1']*df2['col1'].values

如您现在所见,仅使用df1 ['col1']系列索引