熊猫字典:to_dict不存储所有值



我有一个包含 40000 行的数据帧df

0  bin
0      4.506840  4-5
1      4.506840  4-5
2      4.444245  4-5
3      4.485975  4-5
4      4.527705  4-5
...         ...  ...
39995  6.572475  6-7
39996  6.697665  6-7
39997  6.322095  6-7
39998  6.322095  6-7
39999  6.676800  6-7

它存储列"0"中的每个数字它所属的间隔(bin(。 我想通过以下方式将其转换为字典:

dict(zip(df[0],df.bin))

获取如下输出:

{4.506840: '4-5', 4.506840: '4-5', 4.444245: '4-5, ... }

所以我想存储"0"中的每个值及其所属的 bin。 不知何故,我的字典的长度为 340,而不是 40000,因此它不会存储所有行。我的问题是:为什么?我如何获取字典中的所有 40000 行?干杯!

由于您的df[0]中有重复项,并且由于您不能在 python 字典中复制相同的键,您可以执行以下操作:

result = {}
for i_0, i_bin in zip(df[0],df.bin):
if i_0 not in result.keys():
result[i_0] = []
result[i_0].append(i_bin)

输出:

{
"4.506840": ["4-5", "4-5"],
"4.444245": ["4-5"],
...
}

这取决于你想要实现什么,但这是一种感知所有价值的方式。

编辑:

根据@anky评论,您可以使用熊猫聚合函数来执行相同的操作,而不是循环。当然,它具有更好的性能:

df.groupby(0)['bin'].agg(list).to_dict()

也许您在该列中有多个相同的值,并且 python 允许您存储多个相同的值,但您不能存储多个相同的键。我建议您不要使用字典,或者尝试在将 df 中的每个副本上放置一些标识符,然后再将其转换为字典以将其与其他键区分开来。另一种方法是划分重复项所在的 df 或将所有重复项存储在一个列表中,尽管我不确定这是您想要的。

最新更新