【问题标题】:compute the mean values over every n elements of different groups计算不同组的每 n 个元素的平均值
【发布时间】:2015-06-15 07:33:14
【问题描述】:

想象一下,我在 Ipython 中有一个如下所示的数据框:

df = pd.DataFrame({
    'A' : ['1', '1', '1', '1','1', '1', '2', '2', '2', '2', '2', '2'],
    'B' : ['00:00', '00:10', '00:20', '00:30','01:10', '01:20','00:00', '00:10', '00:20', '00:30','01:10', '01:20',],
    'C' : [2,3,4,2,4,5,6,7,1,5,6,4]}
)

我需要的是右侧结果:它是按 A 分组,然后计算每组每 2(n) 行的平均值。我需要为具有超过 4K 组的超大规模数据集执行此操作。

我尝试使用 Pandas,我认为它可能是一个有用的库。

【问题讨论】:

  • 你尝试过什么吗?
  • 是的,我试过了:grouped = df.groupby('A') 然后我可以通过这种方式访问​​每个组:group1 = grouped.get_group('1') 和每 2 个使用 group1[0:2] 对一个组的元素,然后在 for 循环中运行它,这会花费很多时间!
  • 你的答案可能在于学习what you can do with a DataFrame(显然不是一个小任务)。

标签: python sql pandas dataframe


【解决方案1】:

此解决方案适用于您的示例

df.groupby(['A',(df.index/2).astype(int)])['C'].mean()

编辑:更通用的解决方案。独立于索引:

g1 =(df.groupby(['A'])['B'].rank()/2).astype(int)
df.groupby(['A',g1])['C'].mean()

【讨论】:

  • 它看起来不错的答案,我试过但结果不正确。我对所有这些都做了一个循环,效果还不错。我尝试重复使用你的...
【解决方案2】:

我不知道 Pandas,但这里是 Python。

A = ['1', '1', '1', '1','1', '1', '2', '2', '2', '2', '2', '2'],
B = ['00:00', '00:10', '00:20', '00:30','01:10', '01:20','00:00', '00:10', '00:20', '00:30','01:10', '01:20',],
C = [2,3,4,2,4,5,6,7,1,5,6,4]}

return [(a, (b0+b1)/2) for a, b0, b1 in zip(A[::2], B[::2], B[1::2])]

B[::2]slice notation 表示“我想要列表中的所有其他元素,从头开始”,而B[1::2] 表示“我想要所有其他元素,从 B[1] 开始”。

zip function 接受多个序列并返回一个元组列表(或者,在 Python 3 中,一个迭代器),每次从每个序列中获取一个元素。

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2017-09-23
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多