通过索引连接的两个数据帧



我有两个数据帧。

[2500 rows x 4 columns]
Kundenname              Adresse                Ort      PLZ
0          Amt Nortorfer Land        Niedernstraße 6            Nortorf  24539.0
1                Nord    GmbH         Heilbadstr. 85            Münster  24529.0
2               Vertrieb GmbH              Straße  4             Kassel  31117.0
.......

[1900 rows x 38 columns]
0     1      2       3     4     5   ...    32    33    34    35    36    37
0  (0   118   1999   2117)  None  None  ...  None  None  None  None  None  None
1  (1   2000) None   None   None ....
....

结果应该是这样的:

Kundenname          Adresse      Ort      PLZ
0     Amt Nortorfer Land  Niedernstraße 6  Nortorf  24589.0
118   Amt Nortorfer Land  Niedernstraße 6  Nortorf  24589.0
1999  Amt Nortorfer Land  Niedernstraße 6  Nortorf  24589.0
2117  Amt Nortorfer Land  Niedernstraße 6  Nortorf  24589.0
1       ......
2000    ......

等等。

我只是用df.loc[[9,118,1999,2117]]做了这件事,但我需要一个循环或一些不必手动输入的东西。

当df1是包含地址数据的数据帧,而df2是索引数据帧时,如下所示:

df2 = pd.DataFrame({0:[0,1], 1:[118, 2000], 2:[1999, None], 3:[2117, None], 4:[None, None]})

您可以使用melt:重写index_dataframe(df2(

index_values = pd.melt(df2.reset_index(), id_vars='index').set_index('index')[['value']].dropna()

这将给您以下结果:

value
index   
0       0
1       1
0       118
1       2000
0       1999
0       2117

您可以使用它与您的df1:合并

index_values.merge(df1, left_index=True, right_index=True).set_index('value')

结果:

Kundenname          Adresse         Ort     PLZ
value               
0.0     Amt Nortorfer Land  Niedernstraße 6 Nortorf 24539.0
118.0   Amt Nortorfer Land  Niedernstraße 6 Nortorf 24539.0
1999.0  Amt Nortorfer Land  Niedernstraße 6 Nortorf 24539.0
2117.0  Amt Nortorfer Land  Niedernstraße 6 Nortorf 24539.0
1.0     Nord GmbH           Heilbadstr. 85  Münster 24529.0
2000.0  Nord GmbH           Heilbadstr. 85  Münster 24529.0

如果df2真的像T先生所问的那样包含括号,那么你当然应该先去掉这些。假设所有的df2值都是字符串,这意味着要执行以下操作:

index_values.value = index_values.value.str.replace('(', '').str.replace(')', '').astype(float)

最新更新