我有两个数据帧。 DF1和DF2。我正在比较两者之间坐标对之间的绝对距离。我想填充一个新的数据帧,该数据帧包含每个df1坐标对的行和每个df2坐标对的列。
这将导致每个df1对与每个df2对之间的绝对距离。到目前为止,这是我的代码,我正在努力弄清楚如何在每次迭代时填充新的数据帧。
`df_new = pd.DataFrame(index=df1.index.copy())
for idx_crime, x_crime in enumerate(df2['X_COORD']):
y_crime = df2['Y_COORD'].iloc[idx_crime]
for idx_subway, x_subway in enumerate(df1['X_COORD']):
y_subway = df1['Y_COORD'].iloc[idx_subway]
dist = np.sqrt((x_crime - x_subway)**2 + (y_crime - y_subway)**2)
append.df_new
return df_new`
它没有运行。有关如何填写这个新数据框的任何想法吗?
修改 样本数据
DF2 Coordinates:
X_COORD Y_COORD
0 1007314.0 241257.0
1 1043991.0 193406.0
2 999463.0 231690.0
3 1060183.0 177862.0
4 987606.0 208148.0
DF1 Coordinates:
X_COORD Y_COORD
0 1020671.0 248680.0
1 1019420.0 245867.0
2 1017558.0 245632.0
所以df_new看起来像这样。只是索引号可用于列标题。我只想告诉你数据的外观:
df2_coord0 df2_coord1 df2_coord2
df1_coord0 13356.72213 23318.81485 21207.59944
df1_coord1 12105.8096 24569.93244 19956.64481
答案 0 :(得分:0)
显然,append.df_new
是错误的。如果这是您的伪代码,那么您需要将单元格插入到dataFrame中。这有两种方式:
using position indexing或using conditional indexing。
示例代码:
import pandas as pd
lst = [
{"a":1,"b":1},
{"a":2,"b":2}
]
df = pd.DataFrame(lst)
df.loc[2] = [3, 3] #2 here should be your desire index
df.loc[3] = {"a":4,"b":4} #3 here should be your desire index
print df
答案 1 :(得分:0)
我不得不将df2分解为更小的dfs,以免引发内存错误。我把for循环更改为了这个并且它可以工作......只需要一段时间就可以到达那里:
df_new = pd.DataFrame(index = df1.index.copy(),columns = df2.index.copy())
for idx_crime, x_crime in enumerate(df2['X_COORD']):
y_crime = df2['Y_COORD'].iloc[idx_crime]
for idx_subway, x_subway in enumerate(df1['X_COORD']):
y_subway = df1['Y_COORD'].iloc[idx_subway]
dist = np.sqrt((x_crime - x_subway)**2 + (y_crime - y_subway)**2)
df_new.iloc[idx_subway, idx_crime] = dist
return df_new