如何使用列名将Pandas数据帧转换为三级嵌套字典
列不是前三列,我希望它按列artist
分组,然后按列album
分组,并且我需要它不区分大小写,最好不使用defaultdict
这是一个最小的可复制示例:
from collections import defaultdict
from itertools import product
from pandas import DataFrame
tree = defaultdict(lambda: defaultdict(dict))
columns = {'a': str(), 'b': str(), 'c': str(), 'd': int(), 'e': int(), 'f': int()}
df = DataFrame(columns, index=[])
for i, j, k in product('abcd', repeat=3):
tree[i][j][k] = list(map('abcd'.index, (i, j, k)))
df.loc[len(df)] = [i, j, k, *list(map('abcd'.index, (i, j, k)))]
如何从df
获取类似于tree
的嵌套字典
我真的很抱歉,我可以提供任何实际的例子,因为它们不是最小的
我试图使用.groupby()
,但我只看到它与一列一起使用,我真的不知道如何处理它返回的pandas.core.groupby.generic.DataFrameGroupBy
对象,我今天才开始使用它
目前我可以这样做:
tree1 = dict()
for index, row in df.iterrows():
if not tree1.get(row['a'].lower()):
tree1[row['a'].lower()] = dict()
if not tree1[row['a'].lower()].get(row['b'].lower()):
tree1[row['a'].lower()][row['b'].lower()] = dict()
tree1[row['a'].lower()][row['b'].lower()][row['c'].lower()] = [row['d'], row['e'], row['f']]
实际上,我实现了不区分大小写的str
和dict
,但是为了简洁起见(它们很长),我不会在这里使用它
但是根据这个答案https://stackoverflow.com/a/55557758/16383578这样的方法是不好的,有什么更好的方法
我可能会这样做:
或
这会产生相同的结果(当包含第一个casefolds零件时)
但我觉得这有点太复杂了
结果:
相关问题 更多 >
编程相关推荐