颠倒各组元素的顺序

问题描述 投票:0回答:1

假设我有一个这样的DataFrame。

import pandas as pd

df = pd.DataFrame({'a': [1,1,1,1,2,2,2,2], 'b': [1,2,3,4,5,6,7,8]})

它看起来是这样的

   a  b
0  1  1
1  1  2
2  1  3
3  1  4
4  2  5
5  2  6
6  2  7
7  2  8

我想把它的元素倒过来 每组,其中列 a 决定了该组。因此,所需的输出将是

   a  b
0  1  4
1  1  3
2  1  2
3  1  1
4  2  8
5  2  7
6  2  6
7  2  5

我如何才能做到这一点?

python pandas dataframe pandas-groupby
1个回答
1
投票

这个解决方案应该可以实现上位机的要求,即把每个a的b的顺序反过来(不是排序)。

(
    df.groupby('a', sort=False)
    .apply(lambda x: x.iloc[::-1])
    .reset_index(drop=True)
)

1
投票

这似乎是可行的。

df = pd.DataFrame({'a': [1,1,1,1,2,2,2,2], 'b': [1,2,3,4,5,6,7,8]})

df.sort_values(by=['b'], ascending=False).sort_values(by=['a'], ascending=True)

1
投票

df = df.sort_values(by='b', ascending=False).sort_values(by='a')

最小化版本。(归功于PYD)

df.sort_values(['a','b'],ascending=[True,False])


0
投票

df.sort_values(['a','b'],ascending=[True,False])


0
投票

对不起,我的问题可能不清楚--我希望把元素出现的顺序反过来,而不是按它们排序。

这似乎是工作。

        reversed_ = df.copy()
        def reversing(x):
            x['a'] = x['a'].iloc[::-1].to_numpy()
            return x
        reversed_ = reversed_.groupby('group').apply(reversing)
        df['reversed_a'] = reversed_['a']

0
投票
df.sort_values(['a','b'], ascending = [True, False])

你好 请看这里做进一步解释

© www.soinside.com 2019 - 2024. All rights reserved.