Если я правильно понимаю, ваш фрейм данных c_in_node
отличается от ваших массивов. Этот код:
m_in_flow = pd.DataFrame(c_in_node[fl_from_node if q_flowline >= 0 else fl_to_node]*q_flowline)
не даст вам того, что вы хотите, потому что условные операторы не ссылаются ни на что в кадре данных - использование []
означает, что вы хотите поднастроить кадр данных, используя информацию, которая может быть найдена в самом кадре данных. В противном случае он не будет знать, как индексировать строки. Хотя я скажу, что это то, что я предполагаю из вашего вопроса. Увидеть фактическую ошибку поможет больше, чем просто сказать «это не работает».
Если ваши массивы должны быть выровнены вместе (чтобы они имели одинаковую длину), вы можете сделать что-то вроде:
import numpy as np
import pandas as pd
q_flowline = np.array(0.1, 0.2, -0.1, -0.3)
fl_from_node = (1907, 2343, 1845, 2179)
fl_to_node = (2343, 2344, 2050, 3611)
stacked_array = np.column_stack((q_flowline, fl_from_node, flow_to_node))
stacked_df = pd.DataFrame(stacked_array, columns = ['q_flowline', 'fl_from_node', 'fl_to_node'])
full_df = pd.concat([c_in_node, stacked_df], axis=1)
pos_flowline_df = full_df['fl_from_node'][(full_df['q_flowline'] >= 0)]
neg_flowline_df = full_df['fl_to_node'][(full_df['q_flowline'] < 0)]
Затем объедините новые DF так, как вам нужно, в зависимости от того, какой индекс или последовательность требуется.
Обратите внимание, что я удалил elision из ваших массивов, то есть я заставил их иметь одинаковую длину.