使用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'))