使用pandas加入数据帧时遇到了另一个问题。我想将一个完整的数据帧合并到另一个数据帧的列/字段中,其中DF2的外键字段与DF1的唯一键匹配。
输入数据是2个大致看起来像这样的CSV文件:
CSV 1 / DF 1:
cid;name;surname;address
1;Mueller;Hans;42553
2;Meier;Peter;42873
3;Schmidt;Micha;42567
4;Pauli;Ulli;98790
5;Dick;Franz;45632
CSV 2 / DF 1:
OID;ticketid;XID;message
1;9;1;fgsgfs
2;8;2;gdfg
3;7;3;gfsfgfg
4;6;4;fgsfdgfd
5;5;5;dgsgd
6;4;5;dfgsgdf
7;3;1;dfgdhfd
8;2;2;dfdghgdh
我希望DF2的每一行(其中XID与DF1的cid匹配)作为DF1中的单个字段。我的最终目标是将上面的输入文件转换为嵌套的JSON格式。
编辑1:
这样的事情:
[
{
"cid": 1,
"name": "Mueller",
"surname": "Hans",
"address": 42553,
"ticket" :[{
"OID": 1,
"ticketid": 9,
"XID": 1,
"message": "fgsgfs"
}]
},
...]
编辑2:
进一步的想法:是否可以在数据帧2中创建每行的字典,然后将此字典附加到数据帧1中的新列,其中字典的某些值(xid)与行中的唯一ID匹配(cid)?
我脑子里有一些伪代码:
Add new column "ticket" in DF1
Iterate over rows in DF2:
row to dictionary
iterate over DF1
find row where cid = dict.XID
append dictionary to field in "ticket"
convert DF1 to JSON
非Python解决方案也是可以接受的。
答案 0 :(得分:0)
不确定您对输出的期望,但请检查merge
df1.merge(df2, left_on="cid", right_on="XID", how="left")
[基于预期输出的编辑]
也许是这样的:
(
df1.merge(
df2.groupby("XID").apply(lambda g: g.to_dict(orient="records")).reset_index(name="ticket"),
how="left", left_on="cid", right_on="XID")
.drop(["XID"], axis=1)
.to_json(orient="records")
)