我有一个如下所示的数据框:
start stop duration
0 1 2 1
1 3 4 2
2 2 1 2
3 4 3 0
我试图用键=(开始,停止)对和值=它们持续时间的平均值来构建一个字典,不管顺序如何。换句话说,(1,2) 和 (2,1) 都算作 (1,2) 对的出现。
期望的输出:dict_avg= {(1,2):1.5, (3,4):1}
实现此目标的最佳方法是什么?
最佳答案
这是一种可能的方法,采用排序对的元组:
>>> grp = df[['start', 'stop']].apply(lambda x: tuple(sorted(x)), axis=1)
>>> df.groupby(grp)['duration'].mean().to_dict()
{(1, 2): 1.5, (3, 4): 1.0}
作为免责声明,我几乎可以保证这将比此处给出的 NumPy 排序慢得多,因为在 .apply()
中使用了 lambda
(并且需要使用 sorted()
+ tuple()
constructor) 在 Python 空间中进行每次调用,而不是像理想情况下通过 Pandas 那样在 Cython/C 中完成/NumPy。
关于python-3.x - 从 Pandas 构建一个方法词典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638031/