Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用数据库的字符串保持索引匹配数据库_Python_Pandas - Fatal编程技术网

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