我正在尝试将我的数据(带有字典的列表)结构化,为此我使用了pandas df。
我试图在没有使用熊猫的情况下进行复制,我尝试使用zip和pop,但是我无法达到与使用pandas df相似的任何东西。
即使使用pandas df pivot,输出也是我想要的,但我正在丢失'name',我希望为所有名称构建数据。
我的问题是我是否可以在不使用pandas的情况下获得类似的输出,以及为什么不为所有名称打印表格?
rec =[{'date': u'2018-01-21', 'name' : u'John', 'fieldname': u'lunch', 'fieldvalue': u'10'},
{'date': u'2018-01-21', 'name' : u'John', 'fieldname': u'dinner', 'fieldvalue': u'9'},
{'date': u'2018-01-22', 'name' : u'John', 'fieldname': u'lunch', 'fieldvalue': u'11'},
{'date': u'2018-01-22', 'name' : u'John', 'fieldname': u'dinner', 'fieldvalue': u'8'},
{'date': u'2018-01-23', 'name' : u'John', 'fieldname': u'lunch', 'fieldvalue': u'12'},
{'date': u'2018-01-23', 'name' : u'John', 'fieldname': u'dinner', 'fieldvalue': u'5'}]
[{'date': u'2018-01-21', 'name' : u'Anna', 'fieldname': u'lunch', 'fieldvalue': u'11'},
{'date': u'2018-01-21', 'name' : u'Anna', 'fieldname': u'dinner', 'fieldvalue': u'8'},
{'date': u'2018-01-22', 'name' : u'Anna', 'fieldname': u'lunch', 'fieldvalue': u'13'},
{'date': u'2018-01-22', 'name' : u'Anna', 'fieldname': u'dinner', 'fieldvalue': u'9'},
{'date': u'2018-01-23', 'name' : u'Anna', 'fieldname': u'lunch', 'fieldvalue': u'11'},
{'date': u'2018-01-23', 'name' : u'Anna', 'fieldname': u'dinner', 'fieldvalue': u'15'}]
[{'date': u'2018-01-21', 'name' : u'John', 'fieldname': u'lunch', 'fieldvalue': u'14'},
{'date': u'2018-01-21', 'name' : u'John', 'fieldname': u'dinner', 'fieldvalue': u'3'},
{'date': u'2018-01-22', 'name' : u'John', 'fieldname': u'lunch', 'fieldvalue': u'16'},
{'date': u'2018-01-22', 'name' : u'John', 'fieldname': u'dinner', 'fieldvalue': u'9'},
{'date': u'2018-01-23', 'name' : u'John', 'fieldname': u'lunch', 'fieldvalue': u'12'},
{'date': u'2018-01-23', 'name' : u'John', 'fieldname': u'dinner', 'fieldvalue': u'9'}]
[{'date': u'2018-01-21', 'name' : u'Brian', 'fieldname': u'lunch', 'fieldvalue': u'11'},
{'date': u'2018-01-21', 'name' : u'Brian', 'fieldname': u'dinner', 'fieldvalue': u'13'},
{'date': u'2018-01-22', 'name' : u'Brian', 'fieldname': u'lunch', 'fieldvalue': u'12'},
{'date': u'2018-01-22', 'name' : u'Brian', 'fieldname': u'dinner', 'fieldvalue': u'8'},
{'date': u'2018-01-23', 'name' : u'Brian', 'fieldname': u'lunch', 'fieldvalue': u'11'},
{'date': u'2018-01-23', 'name' : u'Brian', 'fieldname': u'dinner', 'fieldvalue': u'15'}]
df(rec)
date fieldname fieldvalue name
0 2018-01-21 lunch 10 John
1 2018-01-21 dinner 9 John
2 2018-01-22 lunch 11 John
3 2018-01-22 dinner 8 John
4 2018-01-23 lunch 12 John
5 2018-01-23 dinner 5 John
df(rec).pivot(index='date', columns='fieldname', values='fieldvalue')
fieldname dinner lunch
date
2018-01-21 9 10
2018-01-22 8 11
2018-01-23 5 12
所需输出:
Anna
fieldname dinner lunch
date
2018-01-21 9 10
2018-01-22 8 11
2018-01-23 5 12
John
fieldname dinner lunch
date
2018-01-21 9 10
2018-01-22 8 11
2018-01-23 5 12
Brian
fieldname dinner lunch
date
2018-01-21 9 10
2018-01-22 8 11
2018-01-23 5 12
答案 0 :(得分:0)
这适用于3种情况:
fieldvalue
列转换为数字。<强>解决方案强>
df = pd.DataFrame(rec).drop_duplicates(['date', 'name', 'fieldname'])
df['fieldvalue'] = pd.to_numeric(df['fieldvalue'], downcast='integer')
dfs = {k: pd.pivot_table(df[df['name'] == k], index=['date'],
columns=['fieldname'], values=['fieldvalue']) \
for k in set(df['name'])}
<强>结果强>
由于我使用了上面的drop_duplicates
选项,您可能会看到与所需输出不同的结果。
{'Brian': fieldvalue
fieldname dinner lunch
date
2018-01-21 13 11
2018-01-22 8 12
2018-01-23 15 11,
'Anna': fieldvalue
fieldname dinner lunch
date
2018-01-21 8 11
2018-01-22 9 13
2018-01-23 15 11,
'John': fieldvalue
fieldname dinner lunch
date
2018-01-21 9 10
2018-01-22 8 11
2018-01-23 5 12}