我正在尝试为合并后的数据帧中的每一行创建一个新的连接变量。连接的名称将基于相对于表索引和父索引的表名。父索引充当表索引的映射。下面是我的表格:
Table Index ParentIndex TableName
0 -1 ingredient
1 0 salt
2 0 pepper
3 1 butter
df0
FieldIndex TableIndex FieldName
0 1 afield
1 3 anotherfield
2 2 afield
df1
我已经合并了TableIndex
上的数据帧。所需的输出将如下所示:
TableIndex ParentIndex FieldIndex FieldName ConcatNames
1 0 0 afield ingredient.salt.afield
3 1 1 anotherfield ingredient.salt.butter.anotherfield
2 0 2 afield ingredient.pepper.afield
正如您所看到的,ParentIndex
在某种程度上是TableIndex
的复合函数,直到它达到-1 (并且不必包含在最终输出中)。我不知道该怎么做。这可以使用像df.index.map
或pd.IntervalIndex
这样的东西来实现吗?这也不是唯一的文件,每个文件的表名都不同。
发布于 2020-06-09 07:17:51
df = pd.merge(df1, df0,on='TableIndex')
for index, row in df.iterrows():
pidx = row.ParentIndex
table_names = [row.TableName,row.FieldName]
while pidx!=-1:
p_row = df0[df0['TableIndex']==pidx]
insert_name = p_row.TableName.iloc[0]
table_names.insert(0, insert_name)
pidx = p_row.ParentIndex.iloc[0]
df.at[index, "ConcatName"] = ".".join(table_names)
print(df[['TableIndex','ParentIndex','FieldIndex','FieldName','ConcatName']])
发布于 2020-06-08 20:09:48
我试着这样解决它...希望能对你有所帮助。
df = pd.merge(df0, df1)
table_name = df0[df0["ParentIndex"] == -1]["TableName"][0]
for index, row in df.iterrows():
table_names = df0[df0["ParentIndex"] == row["ParentIndex"]]["TableName"].to_list()
str_table_names = ".".join(table_names)
df.at[index, "ConcatName"] = table_name + "." + str_table_names + "." + row["FieldName"]
https://stackoverflow.com/questions/62269839
复制相似问题