我正在尝试为合并数据框中的每一行创建一个新的级联变量。串联名称将基于关于表索引和父索引的表名称。父索引充当表索引的映射。这是我的桌子的样子:
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
之类的东西来实现?这也不是唯一的文件,并且每个表的名称都不同。
答案 0 :(得分:1)
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']])
答案 1 :(得分:0)
我试图像这样解决它...希望对您有帮助。
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"]