Numpy, умножьте фрейм данных на число, выводящее NaN - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь умножить столбец данных 1 в столбце данных на столбец данных 2 в столбце b.

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

Столбец pnlValue содержит много чисел, а столбец fx_rate - это только одно число.

Код выполняетсяно мой конечный результат в конечном итоге с тоннами NaN.

Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 05 октября 2019

Вероятно, это связано с индексом вашего фрейма данных. Вам нужно использовать 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

Выход:

1    1
2    1
Name: 1, dtype: int64

, как вы видите сейчас только df1 [используется индекс серии 'col1'

2 голосов
/ 05 октября 2019

- Привет, Excelguy,

Есть ли причина, по которой вы не можете использовать простое умножение столбцов?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...