假设我有一个这样的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
我如何才能做到这一点?
这个解决方案应该可以实现上位机的要求,即把每个a的b的顺序反过来(不是排序)。
(
df.groupby('a', sort=False)
.apply(lambda x: x.iloc[::-1])
.reset_index(drop=True)
)
这似乎是可行的。
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)
df = df.sort_values(by='b', ascending=False).sort_values(by='a')
df.sort_values(['a','b'],ascending=[True,False])
df.sort_values(['a','b'],ascending=[True,False])
对不起,我的问题可能不清楚--我希望把元素出现的顺序反过来,而不是按它们排序。
这似乎是工作。
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']
df.sort_values(['a','b'], ascending = [True, False])