我有一个数据框,例如:
<li class='dropdown'><span>Features ▾</span>
<ul class='features-menu'>
<li><a href='#'>Harder</a></li>
<li><a href='#'>Better</a></li>
<li><a href='#'>Faster</a></li>
<li><a href='#'>Stronger</a></li>
</ul>
</li>
我想得到一个字典,其中每个索引都将成为字典中的键,以便: 键= 0,值= ['val1','val2','val3','val4','val5']
任何想法怎么做?我一直在使用“ to_dict”,但似乎我没有做我需要做的事。
答案 0 :(得分:2)
我可以想到这样的东西:
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']}
答案 1 :(得分:2)
使用groupby
和apply
,然后进行最后的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
执行排序(无论它是否稳定是实现细节)的同时,这还将保留值的排序。
答案 2 :(得分:1)
使用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']}