新Pandas DF,索引来自一个DF,列来自另一个

时间:2017-10-24 02:27:11

标签: python pandas

我有两个数据帧。 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

2 个答案:

答案 0 :(得分:0)

显然,append.df_new是错误的。如果这是您的伪代码,那么您需要将单元格插入到dataFrame中。这有两种方式: using position indexingusing 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