我有两个数据帧,它们是从一个高程轮廓的数据透视表构建的,它们看起来像下面。第二帧是第一次向右移动一列的版本
框架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
当我尝试构造一个新的数据框时,是否可以使用列标题和索引值进行操作?例如,当我从第一个数据帧减去第二个数据帧时,是否可以使用相应列标题和索引的平方和作为每个值的分母?
我尝试将行标题和列标题存储为单独的列表,但是在对两个数据框进行迭代时无法将它们集成。
感谢您的帮助。
答案 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)