Python 按组反转列值

Python 按组反转列值,python,pandas,sorting,dataframe,columnsorting,Python,Pandas,Sorting,Dataframe,Columnsorting,我想反转数据帧中的列值,但仅在单个“groupby”级别上反转。下面是一个简单的示例,我想“翻转”属于相同字母a、B或C的值: df = pd.DataFrame({"group":["A","A","A","B","B","B","B","C","C"], "value": [1,3,2,4,4,2,3,2,5]}) group value 0 A 1 1 A 3 2 A 2 3 B

我想反转数据帧中的列值,但仅在单个“groupby”级别上反转。下面是一个简单的示例,我想“翻转”属于相同字母a、B或C的值:

df = pd.DataFrame({"group":["A","A","A","B","B","B","B","C","C"],
                   "value": [1,3,2,4,4,2,3,2,5]})

  group  value
0     A      1
1     A      3
2     A      2
3     B      4
4     B      4
5     B      2
6     B      3
7     C      2
8     C      5
我想要的输出如下:(为了简洁起见,添加了列而不是替换列)

和往常一样,当我看不到合适的向量样式方法时,我会为了最终输出而使用循环,但我当前的代码让我非常痛苦:

for i in list(set(df["group"].values.tolist())):
    reversed_group = df.loc[df["group"]==i,"value"].values.tolist()[::-1]
    df.loc[df["group"]==i,"value_desired"] = reversed_group

熊猫大师,请给我指路:)

你可以使用
transform

In [900]: df.groupby('group')['value'].transform(lambda x: x[::-1])
Out[900]:
0    2
1    3
2    1
3    3
4    2
5    4
6    4
7    5
8    2
Name: value, dtype: int64
细节

In [901]: df['value_desired'] = df.groupby('group')['value'].transform(lambda x: x[::-1])

In [902]: df
Out[902]:
  group  value  value_desired
0     A      1              2
1     A      3              3
2     A      2              1
3     B      4              3
4     B      4              2
5     B      2              4
6     B      3              4
7     C      2              5
8     C      5              2

谢谢转化为救援!我你碰巧知道-你能这么客气,让我看看应用风格方法吗,因为我在区分这两种方法时遇到了一些困难…
df.groupby('group')['value'].apply(lambda x:x[:-1])
?这只适用于我,如果我添加了
值和这行的末尾。否则我将抛出错误
TypeError:插入的列的索引与框架索引不兼容
。看起来像转换返回原始索引的序列,应用返回多索引。。。无论如何谢谢你!
In [901]: df['value_desired'] = df.groupby('group')['value'].transform(lambda x: x[::-1])

In [902]: df
Out[902]:
  group  value  value_desired
0     A      1              2
1     A      3              3
2     A      2              1
3     B      4              3
4     B      4              2
5     B      2              4
6     B      3              4
7     C      2              5
8     C      5              2