我有一个数据框(这些只是供参考的示例列,实际列数相当大)
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'])
使用嵌套列表理解来获取预期输出,并删除
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}]