将数据帧的列转换为键值对的函数

问题描述 投票:0回答:1

我有一个数据框(这些只是供参考的示例列,实际列数相当大)

id A B C D
123 24 98 74 32
456 65 90 61 96

我想将其转换为数据,其中 id 是第一列,第二列包含值,其中第 1 列值用作键,第 2 列值用作值来创建键值对,例如第 1 行和第 2 行将看起来像这样的 col name

id col1
123 [{24:98},{74:32}]
456 [{65:90},{61:96}]

我所做的我按原样使用 id 并使用第 1 列值作为键,使用第 2 列值作为值来创建键值对,然后使用第 3 列值作为键,使用第 4 列值作为值来创建键值对创建键值对,然后将它们合并到一个列表中。

我正在尝试以下解决方案,但出现 **TypeError (unhashable type: 'list') **

结果列表=[]

对于 _,在 df.iterrows() 中行: 当前_id = 行['id']

# Create a list of dictionaries for each row
key_value_pairs = [{row[i]: row[i + 1]} for i in range(1, len(row), 2)]

# Append the ID and list of dictionaries to the result list
result_list.append((current_id, key_value_pairs))

result_df = pd.DataFrame(result_list, columns=['id', 'col1'])

pandas list dictionary iteration key
1个回答
0
投票

使用嵌套列表理解来获取预期输出,并删除

id
列并选择下一列中的配对和取消配对项目:

L = [[{a:b} for a, b in zip(r[::2], r[1::2])] for r in df.drop('id',axis=1).to_numpy()]

result_df = df[['id']].assign(col1=L)
print (result_df)
    id                  col1
0  123  [{24: 98}, {74: 32}]
1  456  [{65: 90}, {61: 96}]
© www.soinside.com 2019 - 2024. All rights reserved.