将一个数据帧除以另一个的问题

Cur*_*ent 1 python dataframe pandas

我已经多次重写这个问题,因为我认为我已经解决了这个问题,但似乎没有。我目前正在尝试遍历 df1 和 df2 的列,将一列除以另一列以填充新的 df3 列,但我遇到的问题是我的所有单元格都是 NaN。

我的循环代码如下:

#Divide One by the Other. Set up for loop
i = 0
for country in df3.columns:    
    df3[country] = df1.iloc[:, [i]].div(df2.iloc[:, [i]])
    i += 1
Run Code Online (Sandbox Code Playgroud)

生成的 df3 是一个仅包含 NaN 的矩阵。

我的 df1 的结构是:

在此处输入图片说明

而我的 df2 结构:

在此处输入图片说明

我将我的 df3 创建为:

df3 = pd.DataFrame(index = df1.index, columns=tickers.index)
Run Code Online (Sandbox Code Playgroud)

看起来像(在人口之前):

在此处输入图片说明

唯一的潜在问题可能是 df3 中的多索引?努力想知道为什么他们不分开。

cs9*_*s95 5

您当前的方法不起作用的原因是因为您正在划分pd.Series对象。pandas分割时自动尝试对齐索引。这是一个例子。

df1

5    0
4    1
3    2
2    3
1    4
dtype: int64

df2

5    0
6    1
7    2
8    3
9    4
dtype: int64

df1 / df2    # you'd expect all 1's in each row, but...

1   NaN
2   NaN
3   NaN
4   NaN
5   NaN
6   NaN
7   NaN
8   NaN
9   NaN
dtype: float64
Run Code Online (Sandbox Code Playgroud)

确保您在df1and 中具有相同数量的行和列df2,然后如果您划分np.array数据框的对应项,这应该变得容易。

v = df1.values / df2.values
df3 = pd.DataFrame(v, index=df1.index, columns=tickers.index)
Run Code Online (Sandbox Code Playgroud)