将DataFrame中的列除以序列(结果仅是NaNs?)

时间:2019-06-20 19:13:03

标签: python pandas dataframe division

我正在尝试执行与此问题中发布的内容类似的事情:Python Pandas - n X m DataFrame multiplied by 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

我首先尝试了乘法运算,以查看是否可以工作,所以我尝试应用以上问题答案中给出的两个解决方案。

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 个答案:

答案 0 :(得分:2)

NaN的原因是由于索引未对齐。为了克服这个问题,您将需要除以numpy数组,

# <=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