Разделите столбцы в DataFrame на Серии (результат только NaNs?) - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь сделать то же, что и в этом вопросе: Python Pandas - n X m DataFrame, умноженный на 1 X m DataFrame

У меня есть nxm DataFrame, со всеми ненулевыми значениями с плавающей запятой и столбцом 1 xm, со всеми ненулевыми значениями с плавающей запятой, и я пытаюсь разделить каждый столбец в кадре данных nxm на значения в столбце.

Итак, у меня есть:

a      b      c
1      2      3
4      5      6
7      8      9

и

x
11
12
13

, и я надеюсь вернуться:

a      b     c
1/11   2/11  3/11
4/12   5/12  6/12
7/13   8/13  9/13

I 'мы сначала попробовали операцию умножения, чтобы посмотреть, смогу ли я заставить ее работать, поэтому я попытался применить два решения, приведенные в ответе на вопрос выше.

df_prod = pd.DataFrame({c:df[c]* df_1[c].ix[0] for c in df.columns})

Это приводит к «ключевой ошибке 0» ииспользуя другое решение:

df.mul(df_1.iloc[0])

Это просто дает мне весь NaN, хотя и в правильной форме.

1 Ответ

2 голосов
/ 20 июня 2019

Причиной появления NaN являются несоответствия ваших индексов.Чтобы преодолеть это, вам нужно либо разделить на числовые массивы,

# <=0.23
df.values / df2[['x']].values  # or df2.values assuming there's only 1 column
# 0.24+
df.to_numpy() / df[['x']].to_numpy()

array([[0.09090909, 0.18181818, 0.27272727],
       [0.33333333, 0.41666667, 0.5       ],
       [0.53846154, 0.61538462, 0.69230769]])

, либо выполнить выравнивание по оси, используя .div:

df.div(df2['x'], axis=0)
          a         b         c
0  0.090909  0.181818  0.272727
1  0.333333  0.416667  0.500000
2  0.538462  0.615385  0.692308
...