gpt4 book ai didi

python - 如何在 pandas groupby 中移动整个组

转载 作者:行者123 更新时间:2023-12-05 05:26:12 25 4
gpt4 key购买 nike

给定以下数据:

data = {'a' : [1,1,1,8,8,3,3,3,3,4,4] }
df = pd.DataFrame(data)

我现在想将整个事情向下移动 n ,以便保留它们当前的顺序。 n=1 的移位所需的输出将是:

desired_output = {'a': [NaN,NaN,NaN,1,1,8,8,8,8,3,3] }
desired_output_df = pd.DataFrame(desired_output)

n=2 的移位应该是:

desired_output = {'a': [NaN,NaN,NaN,NaN,NaN,1,1,1,1,8,8] }
desired_output_df = pd.DataFrame(desired_output)

我一直在搞乱 groupby/transform/apply,但到目前为止还没有任何工作。如果我分组然后移动,它移动每个组给出输出:

NOT_desired_output = {'a' : [NaN, 1, 1, NaN, 8, NaN, 3,3,3, NaN, 4]}

我可以通过迭代来暴力破解它,但我确信有更好的解决方案。有什么想法吗?

最佳答案

这是一个有趣的操作。我可以想出另一种方法来使用 replace .

移动一组:

>>> df['b'] = df.a.shift()
>>> x = df[df.a != df.b]
>>> df.replace(*x.values.T)

它给出了 DataFrame:

     a   b
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 1 NaN
4 1 1
5 8 1
6 8 8
7 8 8
8 8 8
9 3 8
10 3 3

我们只想要列 a这个数据框的:

desired_output_df = pd.DataFrame(_, columns=['a'])

要移动多个组,只需移动列 bx .如果你想按 n 移动组,你需要转移x.b额外的 n-1次。只需插入行

>>> x.b = x.b.shift(n-1)

x = df[df.a != df.b]之后然后执行 df.replace(*x.values.T)步骤。

关于python - 如何在 pandas groupby 中移动整个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27305135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com