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,但通常情况下,您会提供一个唯一的标识符,这样,如果您解压缩列表,它们就不会相互冲突。。。