通过索引连接的两个数据框
Two dataframes connected by index
我有两个数据框。
[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)
我有两个数据框。
[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)