You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame中的Series逆序生成新列?解决iloc无效问题

问题描述

我有一个包含“Currency”和“Order”列的pandas DataFrame,代码如下:

import pandas as pd

data = [["US Dollar", 7.00],
        ['Euro', 2.00],
        ['British Pound', 4.00],
        ['Indian Rupee', 2.00],
        ['Australian Dollar', 9.00],
        ['Canadian Dollar', 3.00],
        ['Singapore Dollar', 3.00],
        ['Swiss Franc', 5.00]
       ]

df = pd.DataFrame(data, columns=['Currency', 'Order'])

尝试用df['Reverse Order'] = df['Order'].iloc[::-1]将Order列逆序存入新列,但新列与原列顺序完全一致:

#   Currency            Order   Reverse Order
# 0 US Dollar           7.0     7.0
# 1 Euro                2.0     2.0
# 2 British Pound       4.0     4.0
# 3 Indian Rupee        2.0     2.0
# 4 Australian Dollar   9.0     9.0
# 5 Canadian Dollar     3.0     3.0
# 6 Singapore Dollar    3.0     3.0
# 7 Swiss Franc         5.0     5.0

期望得到的逆序结果:

#   Currency            Order   Reverse Order
# 0 US Dollar           7.0     5.0
# 1 Euro                2.0     3.0
# 2 British Pound       4.0     3.0
# 3 Indian Rupee        2.0     9.0
# 4 Australian Dollar   9.0     2.0
# 5 Canadian Dollar     3.0     4.0
# 6 Singapore Dollar    3.0     2.0
# 7 Swiss Franc         5.0     7.0

如何正确实现这一需求?

解决方案

问题根源:df['Order'].iloc[::-1]返回的Series保留原索引,pandas赋值时会按索引匹配数据,导致新列与原列一致。以下是几种可行的解决方法:

方法1:提取逆序后的数值数组

直接取逆序后的values(或to_numpy()),得到无索引的数组,赋值时按位置填充:

df['Reverse Order'] = df['Order'].iloc[::-1].values

方法2:重置逆序Series的索引

用reset_index(drop=True)移除原索引,生成连续新索引,确保按位置匹配:

df['Reverse Order'] = df['Order'].iloc[::-1].reset_index(drop=True)

方法3:借助numpy反转数组

使用numpy.flip直接反转Order列的数组:

import numpy as np
df['Reverse Order'] = np.flip(df['Order'].values)

方法4:链式操作赋值

用assign方法实现链式赋值:

df = df.assign(**{'Reverse Order': df['Order'].iloc[::-1].values})

以上方法均可得到期望的逆序结果。

内容的提问来源于stack exchange,提问作者Jesse Sealand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:22:39