我有一个包含 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 或将所有重复项存储在一个列表中,尽管我不确定这是您想要的。