我有3列的DataFrame:
order_id user_id Details
5c7c9 A [{"amount": "160",'id':'p2'},{"amount": "260",'id':'p3'}]
5c5c4 B [{"amount": "10",'id':'p1'},{"amount": "260",'id':'p3'}]
我希望我的最终数据框像:
order_id user_id amount id
5c7c9 A 160 p2
5c7c9 A 260 p3
5c5c4 B 10 p1
5c5c4 B 260 p3
答案 0 :(得分:1)
您可以使用:
s=pd.DataFrame([[x] + [z] for x, y in zip(df1.index,df1.Details) for z in y])
s=s.merge(df1,left_on=0,right_index=True).drop(['Details',0],1)
print(s.pop(1).apply(pd.Series).join(s))
amount id order_id user_id
0 160 p2 5c7c9 A
1 260 p3 5c7c9 A
2 10 p1 5c5c4 B
3 260 p3 5c5c4 B
答案 1 :(得分:1)
首先在必要时通过ast.literal_eval
将值转换为字典,然后对DataFrame
构造函数和concat
使用字典理解,最后使用DataFrame.join
添加到原始字典:< / p>
import ast
#df['Details'] = df['Details'].apply(ast.literal_eval)
df1 = (pd.concat({k: pd.DataFrame(v) for k, v in df.pop('Details').items()})
.reset_index(level=1, drop=True))
df = df.join(df1, rsuffix='_').reset_index(drop=True)
print (df)
order_id user_id amount id
0 5c7c9 A 160 p2
1 5c7c9 A 260 p3
2 5c5c4 B 10 p1
3 5c5c4 B 260 p3