Python 如何以某种方式将行转换为字典

Python 如何以某种方式将行转换为字典,python,json,pandas,Python,Json,Pandas,假设我有一个数据帧(df),如下所示: FileID MatchCat Match Freq CatIDType CatID 0 001 fruit apple 3 food 123 1 001 company apple 3 tech 456 我使用以下方法将其转换为能够将其写入json(此处未完成): temp_df=(df.groupby(['FileID','Match','Freq',as_i

假设我有一个数据帧(
df
),如下所示:

   FileID  MatchCat  Match  Freq  CatIDType  CatID
0  001     fruit     apple  3     food       123
1  001     company   apple  3     tech       456
我使用以下方法将其转换为能够将其写入json(此处未完成):

temp_df=(df.groupby(['FileID','Match','Freq',as_index=False)
.apply(lambda x:x[['MatchCat','CatIDType','CatID']]应用于_dict('r'))
.reset_index())
temp_df.columns=['FileID','Match','Freq','MatchInfo']
j=记录的温度
j
的输出:

[
{
“文件ID”:“001”,
“匹配”:“AAPL”,
“频率”:3,
“匹配信息”:[
{
“CatIdType”:“食品”,
‘CatId’:‘123’,
“火柴猫”:“水果”
}
]
},
{
“文件ID”:“001”,
“匹配”:“AAPL”,
“频率”:3,
“匹配信息”:[
{
“CatIdType”:“tech”,
“CatId”:“456”,
“火柴猫”:“公司”
}
]
}
]
但是,我现在希望看起来像这样(合并为一个,因为
Match
FileID
两者都是相同的):

[
{
“文件ID”:“001”,
“匹配”:“AAPL”,
“频率”:3,
“匹配信息”:[
{
“CatIdType”:“食品”,
‘CatId’:‘123’,
“火柴猫”:“水果”
}, 
{
“CatIdType”:“tech”,
“CatId”:“456”,
“火柴猫”:“公司”
}
]
}
]
有没有一种简单的方法来更改代码以实现此目的?

试试这个

from pprint import pprint

pprint(
    df.groupby(['FileID', 'Match', 'Freq'])['MatchCat', 'CatIDType', 'CatID']
        .apply(lambda x: x.to_dict(orient='r'))
        .reset_index(name='MatchInfo').to_dict(orient='r')
)

试试这个

from pprint import pprint

pprint(
    df.groupby(['FileID', 'Match', 'Freq'])['MatchCat', 'CatIDType', 'CatID']
        .apply(lambda x: x.to_dict(orient='r'))
        .reset_index(name='MatchInfo').to_dict(orient='r')
)


这不是特别可靠的字典代码。如果有多个子字典具有相同的键,那么它们每个都需要一个键来与每个子字典关联,并将它们视为值。这是什么意思?我的意思是,一般来说,在字典中使用列表是完全可以的(就像JSON中一样),但是,如果列表中的对象是具有重复键的字典,根据我的经验,您不会默认允许列表索引作为新键,您为每个子字典
[{id1:Dictionary1},{id2:Dictionary2}]
都包含一个唯一的ID,但通常情况下,您会提供一个唯一的标识符,以便在解包列表时,它们不会相互冲突……这不是特别可靠的字典代码。如果有多个子字典具有相同的键,那么它们每个都需要一个键来与每个子字典关联,并将它们视为值。这是什么意思?我的意思是,一般来说,在字典中使用列表是完全可以的(就像JSON中一样),但是,如果列表中的对象是具有重复键的字典,根据我的经验,您不会默认允许列表索引作为新键,您为每个子字典
[{id1:Dictionary1},{id2:Dictionary2}]
都包含一个唯一的ID,但通常情况下,您会提供一个唯一的标识符,这样,如果您解压缩列表,它们就不会相互冲突。。。