【问题标题】:Issue dividing one dataframe by another问题将一个数据帧除以另一个
【发布时间】:2017-10-27 00:48:11
【问题描述】:

我已经多次重写了这个问题,因为我认为我已经解决了这个问题,但似乎没有。我目前正在尝试遍历 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

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

我的 df1 是这样的结构:

还有我的 df2 结构:

我将我的 df3 创建为:

df3 = pd.DataFrame(index = df1.index, columns=tickers.index)

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

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

【问题讨论】:

  • 你试过了吗? df3[:] = df1.values / df2.values 问题是索引未对齐。
  • @cᴏʟᴅsᴘᴇᴇᴅ 我同意。这应该工作
  • @piRSquared 刚刚注意到... df1 有 31 列,df2 有 27 列,df3 又有 31 列。我不确定 OP 希望从哪里获得剩余的那些缺失的 cols。
  • @cᴏʟᴅsᴘᴇᴇᴅ 可以找到最小列长度 np.min([d.shape[0] for d in [df1, df2, df3]])
  • 感谢您的回复。我将研究列数,因为它们应该是相同的。在相关说明中, df1.iloc[:, [i]].div(df1.iloc[:, [i]]) 在某些行上给出 NaN 是否有原因? (即相同的数据框被自己划分)。

标签: python pandas dataframe


【解决方案1】:

您当前的方法不起作用的原因是您正在划分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

确保df1df2 中的行数和列数相同,然后如果您划分数据帧的np.array 对应项,这将变得容易。

v = df1.values / df2.values
df3 = pd.DataFrame(v, index=df1.index, columns=tickers.index)

【讨论】:

  • 感谢冷速。听起来并不懒惰,因为我今天一直在努力解决这个问题,是否有一种“select from”类型的语句可以在两个或多个数据帧之间运行?例如从索引相同的 df1 和 df2 中选择
  • @CuriousStudent 好吧,我认为您正在寻找合并。或者,您可以只执行idx = df1.index.intersection(df2.index),然后使用idx 来索引两个数据帧。无论如何,这些是不同的问题,所以你应该问一个新问题。
  • @CuriousStudent 无论如何,如果这有帮助,请不要忘记对答案进行投票,如果您满意,请接受。谢谢
  • 我在这里没有明白的是,我的索引至少对某些行是对齐的,这应该给出一个值,但它没有。
  • @CuriousStudent 当我说索引时......我的意思是索引以及列。两者都必须对齐。一旦你弄清楚发生了什么,这很简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2016-08-16
  • 2018-08-18
相关资源
最近更新 更多