熊猫基于多个值创建新变量

时间:2020-06-08 19:30:05

标签: python pandas

我正在尝试为合并数据框中的每一行创建一个新的级联变量。串联名称将基于关于表索引和父索引的表名称。父索引充当表索引的映射。这是我的桌子的样子:

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.mappd.IntervalIndex之类的东西来实现?这也不是唯一的文件,并且每个表的名称都不同。

2 个答案:

答案 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"]