将数据帧的索引设置为字典中的单个键

2024-05-19 12:52:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,例如:

df = {'index': [0, 0, 0, 0, 0, 1,1,1,1,1, 2,2,2,2], 'value': ['val1', 'val2', 'val3', 'val4', 'val5', 'val6','val7','val8','val9','val10', 'val11','val12','val13','val14']}

我想得到一个字典,每个索引将成为我字典中的一个键,这样: 键=0,值=['val1','val2','val3','val4','val5']

你知道怎么做吗?我一直在用“口述”,但看起来我没有做我需要做的事。你知道吗


Tags: 数据dfindex字典valueval1val2val10
3条回答

使用groupbyapply,然后是最后的to_dict调用。你知道吗

df.groupby('index').value.apply(list).to_dict()
# {0: ['val1', 'val2', 'val3', 'val4', 'val5'],
#  1: ['val6', 'val7', 'val8', 'val9', 'val10'],
#  2: ['val11', 'val12', 'val13', 'val14']}

另一种方法是使用setdefault遍历行并附加到字典中的值。你知道吗

d = {}
for k, v in zip(df['index'], df.value):
    d.setdefault(k, []).append(v)

print(d)
# {0: ['val1', 'val2', 'val3', 'val4', 'val5'],
#  1: ['val6', 'val7', 'val8', 'val9', 'val10'],
#  2: ['val11', 'val12', 'val13', 'val14']}

我的测试表明,对于中等大小的帧,这实际上比groupby的性能要好。当groupby执行排序时(是否稳定是实现细节),这也将保留值排序。你知道吗

我能想到这样的事情:

import pandas as pd
df = pd.DataFrame({'index': [0, 0, 0, 0, 0, 1,1,1,1,1, 2,2,2,2], 'value': ['val1', 'val2', 'val3', 'val4', 'val5', 'val6','val7','val8','val9','val10', 'val11','val12','val13','val14']})
df.groupby(by='index').apply(lambda x: list(x['value'])).to_dict()

输出为:

{0: ['val1', 'val2', 'val3', 'val4', 'val5'],
 1: ['val6', 'val7', 'val8', 'val9', 'val10'],
 2: ['val11', 'val12', 'val13', 'val14']}

使用itertools

import itertools
l=df.sort_values('index').values.tolist()
d={k: [x[1] for x in g] for k, g in itertools.groupby(l,lambda x : x[0])}
d
{0: ['val1', 'val2', 'val3', 'val4', 'val5'], 1: ['val6', 'val7', 'val8', 'val9', 'val10'], 2: ['val11', 'val12', 'val13', 'val14']}

相关问题 更多 >