在 Pandas DataFrame 中从一行中减去另一行

3
我正在尝试从Pandas DataFrame中减去一行。在一个数值列之前,我有多个描述符列,这迫使我在DataFrame上设置两个描述符列的索引。
当我这样做时,无论set_index()列列表中列名的第一个是什么,我都会收到一个KeyError错误。在这种情况下,它是'COL_A':
df = pd.DataFrame({'COL_A': ['A', 'A'], 
                   'COL_B': ['B', 'B'], 
                   'COL_C': [4, 2]})
df.set_index(['COL_A', 'COL_B'], inplace=True)
df.iloc[1] = (df.iloc[1] / df.iloc[0])
df.reset_index(inplace=True)


KeyError: 'COL_A'

我没有多想,也无法理解为什么会出现KeyError错误并且它是如何被解决的。
2个回答

1

我看到这个问题需要快速回答。以下是我的解决方案。

>>> df = pd.DataFrame(data=[[5,5,5,5], [3,3,3,3]], index=['r1', 'r2'])
>>> df
    0  1  2  3
r1  5  5  5  5
r2  3  3  3  3
>>> df.loc['r3'] = df.loc['r1'] - df.loc['r2']
>>> df
    0  1  2  3
r1  5  5  5  5
r2  3  3  3  3
r3  2  2  2  2
>>> 

0

不确定我是否正确理解了您的意思:

df = pd.DataFrame({'COL_A': ['A', 'A'],
                   'COL_B': ['B', 'B'],
                   'COL_C': [4, 2]})

给出:

  COL_A COL_B  COL_C
0     A     B      4
1     A     B      2

那么

df.set_index(['COL_A', 'COL_B'], inplace=True)
df.iloc[1] = (df.iloc[1] / df.iloc[0])

产生:

COL_A COL_B       
A     B        4.0
      B        0.5

如果你现在想要从第0行减去第1行,你可以这样做:
df.iloc[1].subtract(df.iloc[0])

获取:

COL_C   -3.5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接