Python 使用数据库的字符串保持索引匹配数据库
我有一个包含字符串和索引的数据库,如下所示Python 使用数据库的字符串保持索引匹配数据库,python,pandas,Python,Pandas,我有一个包含字符串和索引的数据库,如下所示 df0 idx name_id_code string_line_0 0 0.01 A 1 0.5 B 2 77.6 C 3 29.8 D 4 56.2 E 5 88.1000005 F 6 66.4000008 G 7 2.1 H 8 99 I 9 550.9999999 J df1 idx string_line_1 0 A 1 F 2 J 3 G 4 D 现在,我想将df1与df0匹配,取df1=df0的值,但保持df0的索引为true,如
df0
idx name_id_code string_line_0
0 0.01 A
1 0.5 B
2 77.6 C
3 29.8 D
4 56.2 E
5 88.1000005 F
6 66.4000008 G
7 2.1 H
8 99 I
9 550.9999999 J
df1
idx string_line_1
0 A
1 F
2 J
3 G
4 D
现在,我想将df1与df0匹配,取df1=df0的值,但保持df0的索引为true,如下所示
df_result name_id_code string_line_0
0 0.01 A
5 88.1000005 F
9 550.9999999 J
6 66.4000008 G
3 29.8 D
我尝试使用我的代码,但它不适用于字符串,只适用于匹配索引
c = df0['name_id_code'] + ' (' + df0['string_line_0'].astype(str) + ')'
out = df1[df2['string_line_1'].isin(s)]
我还试着保持简单的最后一列匹配,如
c = df0['string_line_0'].astype(str) + ')'
out = df1[df1['string_line_1'].isin(s)]
但输出为空。您可以执行以下操作:
out = df0.loc[(df0["string_line_0"].isin(df1["string_line_1"]))].copy()
out["string_line_0"] = pd.Categorical(out["string_line_0"], categories=df1["string_line_1"].unique())
out.sort_values(by=["string_line_0"], inplace=True)
第一行将df0
过滤到df1
的string\u line\u 0
列中的行
第二行将输出df中的
string\u line\u 0
转换为一个分类特征,然后按照df1中值的顺序对其进行自定义排序,因为它是经过过滤的df0
数据帧,如果被df1使用,则索引值不会更改['string\u line\u 1'
,只有列的顺序与原始的df0
相同:
out = df0[df0['string_line_0'].isin(df1['string_line_1'])]
print (out)
name_id_code string_line_0
idx
0 0.010000 A
3 29.800000 D
5 88.100001 F
6 66.400001 G
9 551.000000 J
或者如果使用,则为避免丢失df0。必须添加索引:
类似的解决方案,只有string\u line\u 0
和string\u line\u 1
列中的值相同:
out = (df1.merge(df0.reset_index(), left_on='string_line_1', right_on='string_line_0'))
print (out)
string_line_1 idx name_id_code string_line_0
0 A 0 0.010000 A
1 F 5 88.100001 F
2 J 9 551.000000 J
3 G 6 66.400001 G
4 D 3 29.800000 D
您能否将df的内容作为dict提供,以便我们能够在代码中使用它?您的第一个解决方案:out=df1[df1['string\u line\u 0'].isin(df0['string\u line\u 1'])]只能工作,但它并没有将df0的索引作为我需要的df0的索引。使用您使用的序列,将wring值作为重复字符串,我也需要将它们与序列一起使用,我也需要在df0的输出索引中使用。虽然DF1的序列更新了我的答案,以显示如何按照df中的值顺序自定义排序输出1
。输出将保留来自df0
df1=df0的索引,索引为df0,但所需的顺序为df1
out = (df1.merge(df0.reset_index(), left_on='string_line_1', right_on='string_line_0'))
print (out)
string_line_1 idx name_id_code string_line_0
0 A 0 0.010000 A
1 F 5 88.100001 F
2 J 9 551.000000 J
3 G 6 66.400001 G
4 D 3 29.800000 D