如果您有一个带有唯一索引的整洁的 Pandas Series 对象,那么使用 pd.Series.to_dict() 可以按您的预期工作:它变成了一个 Python dict,每个索引都指向其各自的值。
如果您有非唯一索引,这会变得复杂。我的预期行为是具有相同索引的值将组合到一个列表中,并且 dict 将索引作为键,将列表作为值。相反,我观察到的是一个以索引为键的字典,并且只有系列中的一个值作为字典中的值。
有没有办法实现我的预期行为,内置于熊猫中,或接近它?目前,我在 for 循环中手动将与每个索引匹配的值整理到 dict 中,循环遍历唯一索引值。有一个更好的方法吗?
编辑:这是一个例子:
my_series = pd.Series(['val_1', 'val_2', 'val_3', 'val_4', 'val_5'])
my_series.index = ['1', '1', '2', '2', '2']
my_series
Run Code Online (Sandbox Code Playgroud)
产量
1 val_1
1 val_2
2 val_3
2 val_4
2 val_5
dtype: object
Run Code Online (Sandbox Code Playgroud)
现在, to_dict() 具有 1:1 匹配行为:
my_series.to_dict()
{'1': 'val_2', '2': 'val_5'}
Run Code Online (Sandbox Code Playgroud)
我想看到的是:
{'1': ['val_1', 'val_2'], '2': ['val_3', 'val_4', 'val_5']}
Run Code Online (Sandbox Code Playgroud)
我可以做到这一点
{idx:list(my_series[idx]) for idx in set(my_series.index)}
{'2': ['val_3', 'val_4', 'val_5'], '1': ['val_1', 'val_2']}
Run Code Online (Sandbox Code Playgroud)
我想知道的是,在 Pandas 中是否有更原生的方法来做到这一点,或者这是处理问题的最佳方法。
我见过这个问题的更广泛版本,其中个人正在寻找多个汇总统计数据,但我还没有看到提出的解决方案。我只对 Python 中的中位数感兴趣。
假设我在循环中生成一百万个值。由于内存问题,我无法将百万个值保存到列表中并在完成后计算中位数。我可以一边计算中位数吗?对于平均值,我只是逐步对值求和,完成后除以一百万。对于中位数来说,答案似乎并不那么直观。
我陷入了“思想实验”部分,所以我无法真正尝试任何我认为可能有效的东西。我不确定这是否是一个已经实现的算法,但我找不到它是否已经实现。