Mik*_*son 2 python dictionary dataframe pandas
我有一个数据框 df ,如下所示:
a b c d
0 8 xx 17 1.0
1 8 xy 19 1.0
2 8 zz 13 0.0
3 9 tt 8 5.0
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个字典,其中包含一个包含元组列表的键,如下所示:
{8:[(17,1.0),(19,1.0),(13,0.0)], 9:[(8,5.0)]}
Run Code Online (Sandbox Code Playgroud)
这里,键来自 a 列,元组列表是键为 a 的 c 列和 d 列。我也将其应用于其他数据集并尝试过
df_new = df.groupby(['a'])[['c','d']).apply(lambda x: [tuple(x) for x in x.values])
Run Code Online (Sandbox Code Playgroud)
但是,我不断收到错误
raise TypeError('Series.name must be a hashable type')
TypeError: Series.name must be a hashable type
Run Code Online (Sandbox Code Playgroud)
我尝试删除 groupby 中的 ['a'] 并将其保留为 'a',如下所示:
df_new = df.groupby('a')[['c','d']).apply(lambda x: [tuple(x) for x in x.values])
Run Code Online (Sandbox Code Playgroud)
但是,我收到相同的以下错误:
raise TypeError('Series.name must be a hashable type')
TypeError: Series.name must be a hashable type
Run Code Online (Sandbox Code Playgroud)
我不想让原始数据帧 df 中的所有内容都不变。我想保持原样。
有没有办法使用 pandas 功能来完成此任务?我真的不想创建列表,然后通过索引将一些列表压缩在一起并从中创建一个字典。
使用defaultdict
from collections import defaultdict
d = defaultdict(list)
for tup in df.itertuples():
d[tup.a].append((tup.c, tup.d))
dict(d)
{8: [(17, 1.0), (19, 1.0), (13, 0.0)], 9: [(8, 5.0)]}
Run Code Online (Sandbox Code Playgroud)
*使用to_dict和groupby*
df.set_index(['c', 'd']).groupby('a').apply(lambda df: df.index.tolist()).to_dict()
{8: [(17, 1.0), (19, 1.0), (13, 0.0)], 9: [(8, 5.0)]}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1871 次 |
| 最近记录: |