基于多个值创建新变量

2024-10-01 17:36:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为合并数据帧中的每一行创建一个新的连接变量。连接的名称将基于与表索引和父索引相关的表名称。父索引充当表索引的映射。我的桌子是这样的:

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

如您所见,ParentIndexTableIndex的一种复合函数,直到它达到-1(并且不必包含在最终输出中)。我不知道该怎么办。这可以通过使用类似df.index.mappd.IntervalIndex的方法实现吗?这也不是唯一的文件,每个文件的表名各不相同


Tags: 文件数据名称tablefieldnamesalt桌子ingredient
2条回答
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']])

我试着这样解决它。。。希望它能帮助你

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

相关问题 更多 >

    热门问题