Python 在数据帧上创建多个索引
我正在尝试将数据帧转换为以下格式的dict:Python 在数据帧上创建多个索引,python,pandas,Python,Pandas,我正在尝试将数据帧转换为以下格式的dict: name age country state pincode user1 10 in tn 1 user2 11 in tx 2 user3 12 eu gh 3 user4 13 eu io 4 user5 14 us pi
name age country state pincode
user1 10 in tn 1
user2 11 in tx 2
user3 12 eu gh 3
user4 13 eu io 4
user5 14 us pi 5
user6 15 us ew 6
输出根据国家对用户进行分组,并有一个用户字典,字典中包含用户的详细信息
{
'in': {
'user1': {'age': 10, 'state': 'tn', 'pincode': 1},
'user2': {'age': 11, 'state': 'tx', 'pincode': 2}
},
'eu': {
'user3': {'age': 12, 'state': 'gh', 'pincode': 3},
'user4': {'age': 13, 'state': 'io', 'pincode': 4},
},
'us': {
'user5': {'age': 14, 'state': 'pi', 'pincode': 5},
'user6': {'age': 15, 'state': 'ew', 'pincode': 6},
}
}
我现在通过下面的语句来实现这一点(这并不完全正确,因为我在循环中使用的是一个列表,而应该是一个dict):
如果df中添加了其他列,我希望解决方案能够正常工作。例如电话号码。因为我写的语句是静态的,所以它不会在输出中给我额外的行。pandas中是否有内置的方法可以做到这一点?您可以将
与groupby
结合使用:
{k:v.drop('country',axis=1).to_dict('i')
for k,v in df.set_index('name').groupby('country')}
输出:
{'eu': {'user3': {'age': 12, 'state': 'gh', 'pincode': 3},
'user4': {'age': 13, 'state': 'io', 'pincode': 4}},
'in': {'user1': {'age': 10, 'state': 'tn', 'pincode': 1},
'user2': {'age': 11, 'state': 'tx', 'pincode': 2}},
'us': {'user5': {'age': 14, 'state': 'pi', 'pincode': 5},
'user6': {'age': 15, 'state': 'ew', 'pincode': 6}}}
您可以将与groupby
组合起来进行记录:
{k:v.drop('country',axis=1).to_dict('i')
for k,v in df.set_index('name').groupby('country')}
输出:
{'eu': {'user3': {'age': 12, 'state': 'gh', 'pincode': 3},
'user4': {'age': 13, 'state': 'io', 'pincode': 4}},
'in': {'user1': {'age': 10, 'state': 'tn', 'pincode': 1},
'user2': {'age': 11, 'state': 'tx', 'pincode': 2}},
'us': {'user5': {'age': 14, 'state': 'pi', 'pincode': 5},
'user6': {'age': 15, 'state': 'ew', 'pincode': 6}}}
当我的索引不是唯一的时,我如何处理这个问题。例如,当用户名在不同的国家重复时,它应该仍然有效,列出每个国家的所有username
。当我的索引不唯一时,我如何处理此问题。例如,当用户名在不同的国家重复时,它应该仍然有效,列出每个国家的所有username
。