使用列标题和索引值进行操作

时间:2018-12-03 22:41:08

标签: python pandas pivot-table

我有两个数据帧,它们是从一个高程轮廓的数据透视表构建的,它们看起来像下面。第二帧是第一次向右移动一列的版本

框架1

Lat          32.063102  32.063194    ...      32.124676  32.124769
Lon                                  ...                          
-100.214676    617.143    617.167    ...        681.024    680.839
-100.214583    617.316    617.331    ...        680.916    680.730
-100.214491    617.495    617.497    ...        680.802    680.609
-100.214398    617.673    617.679    ...        680.690    680.499
-100.214306    617.862    617.862    ...        680.589    680.401

框架2

Lat          32.063194  32.063287    ...      32.124769  0.000000 
Lon                                  ...                          
-100.214676    617.167    617.175    ...        680.839          0
-100.214583    617.331    617.337    ...        680.730          0
-100.214491    617.497    617.505    ...        680.609          0
-100.214398    617.679    617.687    ...        680.499          0
-100.214306    617.862    617.867    ...        680.401          0

当我尝试构造一个新的数据框时,是否可以使用列标题和索引值进行操作?例如,当我从第一个数据帧减去第二个数据帧时,是否可以使用相应列标题和索引的平方和作为每个值的分母?

我尝试将行标题和列标题存储为单独的列表,但是在对两个数据框进行迭代时无法将它们集成。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您希望能够通过通用列索引进行计算(如您在对我的评论的回复中所述)。由于使用DataFrames(即df1 - df2进行计算)的标准行为是匹配行索引和列索引,因此增加了一个额外的困难。在您的情况下,这将导致NaN和无用的结果。

因此,您将不得不用通用索引替换列索引。但是,如果将原始列索引放在形状与原始形状相同的DataFrames中,则仍可以在计算中使用它们。

示例:

import pandas as pd
import numpy as np

"""generate example data"""
df1 = pd.DataFrame(columns=[32.063102, 32.063194])
df1.loc[-100.214676] = [617.143, 617.167]
df1.loc[-100.214583] = [617.316, 617.331]
df1.loc[-100.214491] = [617.495, 617.497]

df2 = pd.DataFrame(columns=[32.063194, 0])
df2.loc[-100.214676] = [617.167, 0]
df2.loc[-100.214583] = [617.331, 0]
df2.loc[-100.214491] = [617.497, 0]

"""generate auxiliary dataframes with original column indices"""
df1i = pd.DataFrame()
df1i = df1i.append([df1.columns]*len(df1.index))
df1i.index = df1.index

df2i = pd.DataFrame()
df2i = df2i.append([df2.columns]*len(df2.index))
df2i.index = df2.index

"""replace column indices by generic ones to allow the computation by generic column index"""
df1.columns = np.arange(len(df1.columns))
df2.columns = np.arange(len(df2.columns))

"""do the computation"""
df3 = (df1 - df2) / (df1i - df2i)
print(df3)