Python 在数据帧上创建多个索引

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

我正在尝试将数据帧转换为以下格式的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      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