使用分组列从数据框中生成字典
generate dict from datarame with grouping columns
我尝试生成一个 json 文件或 dict rom 我的 datframe(对列进行分组)
我的数据帧是
df1 = pd.DataFrame({
'USER': ['ALL','ALL','BOB','STEVE','PAUL','KEITH','STEVE','STEVE','BOB'],
'CITY': ['ALL','ALL','PARIS','LONDON','MILAN','MADRID','LONDON','LONDON','PARIS'],
'TEAMS':['USA','EUROPE','Middle EST','CHINA','JAPAN','MORROCO','Fr','ENGLAN','AUSTRIA'],
'TASK':['ALL','MANY','ONE','TWO','THREE','FOUR','FIVE','SIX','SEVEN']})
预期的输出应该是这样的:
exepectdict ={
[{
'USER':'ALL',
'CITY':'ALL',
'work':
{ 'USA':'ALL',
'EUROPE':'MANY'
}
},
{
'USER':'BOB',
'CITY':'PARIS',
'work':
{ 'Middle EST':'ONE',
'AUSTRIA':'SEVEN'
}
},
{
'USER':'KEITH',
'CITY':'MADRID',
'work':
{ 'MORROCO':'FOUR'
}
},
{
'USER':'PAUL',
'CITY':'MILAN',
'work':
{ 'JAPAN':'THREE'
}
},
{
'USER':'STEVE',
'CITY':'LONDON',
'work':
{ 'CHINA':'TWO',
'Fr':'FIVE',
'ENGLAN':'SIX'
}
}
]}
为此,我尝试对行 (USER?CITY) 进行分组并为(TEAMS 和 TASK 列)生成一个列表:
df_results=df1.groupby(['USER','CITY'])['TEAMS','TASK'].agg(list)
|USER | CITY | TEAMS | TASK |
|:----|:-------:|:---------------------:|-----------------:|
|ALL | ALL | [USA, EUROPE]| [ALL, MANY]|
|BOB | PARIS | [Middle EST, AUSTRIA]| [ONE, SEVEN]|
|KEITH| MADRID | [MORROCO]| [FOUR]|
|PAUL | MILAN | [JAPAN]| [THREE]|
|STEVE| LONDON | [CHINA, Fr, ENGLAN]| [TWO, FIVE, SIX]|
但我不知道如何生成预期的字典格式
为“work”创建一个列,因为它是 TEAMS:TASK 在 groupby
期间的一对一映射
df_results = pd.DataFrame(df.groupby(['USER','CITY'])[['TEAMS','TASK']].apply(lambda x:dict(zip(x['TEAMS'],x['TASK']))), columns=['work'])
df_results.reset_index().to_dict('records')
我尝试生成一个 json 文件或 dict rom 我的 datframe(对列进行分组)
我的数据帧是
df1 = pd.DataFrame({
'USER': ['ALL','ALL','BOB','STEVE','PAUL','KEITH','STEVE','STEVE','BOB'],
'CITY': ['ALL','ALL','PARIS','LONDON','MILAN','MADRID','LONDON','LONDON','PARIS'],
'TEAMS':['USA','EUROPE','Middle EST','CHINA','JAPAN','MORROCO','Fr','ENGLAN','AUSTRIA'],
'TASK':['ALL','MANY','ONE','TWO','THREE','FOUR','FIVE','SIX','SEVEN']})
预期的输出应该是这样的:
exepectdict ={
[{
'USER':'ALL',
'CITY':'ALL',
'work':
{ 'USA':'ALL',
'EUROPE':'MANY'
}
},
{
'USER':'BOB',
'CITY':'PARIS',
'work':
{ 'Middle EST':'ONE',
'AUSTRIA':'SEVEN'
}
},
{
'USER':'KEITH',
'CITY':'MADRID',
'work':
{ 'MORROCO':'FOUR'
}
},
{
'USER':'PAUL',
'CITY':'MILAN',
'work':
{ 'JAPAN':'THREE'
}
},
{
'USER':'STEVE',
'CITY':'LONDON',
'work':
{ 'CHINA':'TWO',
'Fr':'FIVE',
'ENGLAN':'SIX'
}
}
]}
为此,我尝试对行 (USER?CITY) 进行分组并为(TEAMS 和 TASK 列)生成一个列表:
df_results=df1.groupby(['USER','CITY'])['TEAMS','TASK'].agg(list)
|USER | CITY | TEAMS | TASK |
|:----|:-------:|:---------------------:|-----------------:|
|ALL | ALL | [USA, EUROPE]| [ALL, MANY]|
|BOB | PARIS | [Middle EST, AUSTRIA]| [ONE, SEVEN]|
|KEITH| MADRID | [MORROCO]| [FOUR]|
|PAUL | MILAN | [JAPAN]| [THREE]|
|STEVE| LONDON | [CHINA, Fr, ENGLAN]| [TWO, FIVE, SIX]|
但我不知道如何生成预期的字典格式
为“work”创建一个列,因为它是 TEAMS:TASK 在 groupby
期间的一对一映射df_results = pd.DataFrame(df.groupby(['USER','CITY'])[['TEAMS','TASK']].apply(lambda x:dict(zip(x['TEAMS'],x['TASK']))), columns=['work'])
df_results.reset_index().to_dict('records')