[英]Converting a pandas dataframe to a nested dict in Python using groupby
[英]Dataframe groupby by paths in nested dict
DataFrame的groupby支持按表中列的列表进行分组,例如:
from pandas import DataFrame as DF
data2 = [{'a':{'x':1,'y':2},'b':2, 'x0':1},{'a':{'x':3,'y':4},'b':4, 'x0':3},{'a':{'x':1,'y':6},'b':6, 'x0':1}]
(为说明起见,请注意“ x0”列与嵌套字典中的“ x”重复)
这可以按预期工作:
DF(data2).groupby(['x0','b']).size().unstack()
如何模拟此行为,将嵌套的'x'
替换为'x0'
?
我尝试了使用lambda
输出元组的方法:
DF(data2).groupby(lambda i: (data2[i]['a']['x'],data2[i]['b'])).size()
(1, 2) 1
(1, 6) 1
(3, 4) 1
dtype: int64
其中data2[i]['x0']
也用作第一个元组元素。 在这两种情况下unstack
抛出:
AttributeError: 'Index' object has no attribute 'remove_unused_levels'
因此,列/字典键名未正确处理。 是否有就地解决方法,即未设置新变量或DataFrames?
我想如果您想使用lambda expression
,可以,但是不会比第一种方法快:
df = pd.DataFrame(data2).groupby(lambda i: (data2[i]['a']['x'],data2[i]['b'])).size()
# create a multiindex which will allow yo to use unstack
df.index = pd.MultiIndex.from_tuples(df.index, names=['x0', 'b'])
df.unstack(level=1)
b 2 4 6
x0
1 1.0 NaN 1.0
3 NaN 1.0 NaN
使用pd.DataFrame.from_dict():
import pandas as pd
data2 = [
{'a':{'x':1,'y':2},'b':2, 'x':1},
{'a':{'x':3,'y':4},'b':4, 'x':3},
{'a':{'x':1,'y':6},'b':6, 'x':1}
]
df = pd.DataFrame.from_dict(data2)
df = df.groupby(['x','b']).size().unstack()
print(df)
产量
b 2 4 6
x
1 1.0 NaN 1.0
3 NaN 1.0 NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.