具有数据框列名的数学运算

时间:2017-06-22 21:31:10

标签: pandas

一般来说,我遇到的问题是我有数据框的数字列名并且很难使用它们。

我有一个像这样的数据帧(df1):

    3.2  5.4  1.1
1   1.6  2.8  4.0
2   3.5  4.2  3.2

我想创建另一个(df2),其中每个值为:

(df1中的对应值减去左边的值)/ (df1中的列号减去左边的列号)

这意味着df2的第一列是nan,例如,第二列,第二列是:(4.2-3.5)/(5.4-3.2)

我认为这可能有问题,因为列名不是合适的类型:我在其他地方搜索但没有找到任何关于如何以所需方式使用列名的方法。

任何和所有帮助都表示赞赏,即使它涉及到解决方法!

2 个答案:

答案 0 :(得分:1)

v = np.diff(df1.values, axis=1) / np.diff(df1.columns.values.astype(float))
df2 = pd.DataFrame(v, df1.index, df1.columns[1:]).reindex_like(df1)

df2

   3.2       5.4       1.1
1  NaN  0.545455 -0.279070
2  NaN  0.318182  0.232558

答案 1 :(得分:0)

您可以先转置DF并获取行方差。然后用列diff划分每列。最后将DF转换回来。

df2 = df.T.assign(c=lambda x: x.index.astype(float)).diff()
df2.apply(lambda x: x.div(df2.c)).drop('c',1).T
Out[367]: 
   3.2       5.4       1.1
1  NaN  0.545455 -0.279070
2  NaN  0.318182  0.232558