使用pandas将一行中的多个值拆分为多行

使用pandas将一行中的多个值拆分为多行,pandas,Pandas,我的数据如下: d = [{'id':1, 'a':10, 'b':10}, {"id":2,"a":20, "b":20}] res = [{'id': 1, 'prop': 'a', 'value': 10}, {'id': 1, 'prop': 'b', 'value': 10}, {'id': 2, 'prop': 'a', 'value': 20}, {'id': 2, 'prop': 'b', 'value': 20}] 我想要的结果如下: d = [{'id':1,

我的数据如下:

d = [{'id':1, 'a':10, 'b':10}, {"id":2,"a":20, "b":20}]  
res = [{'id': 1, 'prop': 'a', 'value': 10},
 {'id': 1, 'prop': 'b', 'value': 10},
 {'id': 2, 'prop': 'a', 'value': 20},
 {'id': 2, 'prop': 'b', 'value': 20}]
我想要的结果如下:

d = [{'id':1, 'a':10, 'b':10}, {"id":2,"a":20, "b":20}]  
res = [{'id': 1, 'prop': 'a', 'value': 10},
 {'id': 1, 'prop': 'b', 'value': 10},
 {'id': 2, 'prop': 'a', 'value': 20},
 {'id': 2, 'prop': 'b', 'value': 20}]
因为每一行有两个属性,所以我想拆分具有相同id但不同属性的每一行以及该属性的对应值

我正在使用ItErrors作为

import pandas as pd
df = pd.DataFrame(d)
l = []
for _, r in df.iterrows(): 
    for p in ['a','b']: 
        l.append({'id':r.id, 'prop':p, 'value':r[p]})

我得到了我想要的,但我想知道的是,是否有任何方法可以使用命令来实现我的目标

通过构造函数创建
DataFrame
,然后使用参数
r
作为记录的最后一个参数:

df = pd.DataFrame(d)

#melt all columns without id
df1 = df.melt('id', var_name='prop')
#if necessary specify columns
#df1 = df.melt('id', var_name='prop', value_vars=['a','b'])

res = df1.to_dict('r')
print (res)
[{'id': 1, 'prop': 'a', 'value': 10}, {'id': 2, 'prop': 'a', 'value': 20}, 
 {'id': 1, 'prop': 'b', 'value': 10}, {'id': 2, 'prop': 'b', 'value': 20}]

print (type(res))
<class 'list'>
df=pd.DataFrame(d)
#熔化所有没有id的列
df1=df.melt('id',var_name='prop')
#如有必要,请指定列
#df1=df.melt('id',var\u name='prop',value\u vars=['a','b']))
res=df1。表示“r”
打印(res)
[{'id':1,'prop':'a','value':10},{'id':2,'prop':'a','value':20},
{'id':1,'prop':'b','value':10},{'id':2,'prop':'b','value':20}]
打印(打印)
使用,然后与
orient=记录一起使用

使用
json.loads将字符串json转换为正确的列表格式

import json
d = [{'id':1, 'a':10, 'b':10}, {"id":2,"a":20, "b":20}]

df = pd.DataFrame(d)

res = pd.melt(df,id_vars=['id'],value_vars=['a','b'],var_name='prop')

json_res= json.loads(res.to_json(orient='records'))