gpt4 book ai didi

python - 使用 pandas 移动一个值并创建一个新索引

转载 作者:行者123 更新时间:2023-12-05 04:38:30 24 4
gpt4 key购买 nike

我有一个df

            2019            2020            2021            2022

A 10 20 30 40

我正在尝试创建 2 个新索引 A-1A-2 以便输出如下所示:

            2019            2020            2021            2022

A 10 20 30 40
A-1 nan 10 20 40
A-2 nan nan 10 20

我试过:

s = df.loc['A',:].shift(1, axis=0)
s = s.rename({'A': 'A-1'}, axis = 0)
df = df.combine_first(s)

但是我得到一个错误----> 3 df= df.combine_first(s)

ValueError: Must specify axis=0 or 1

当我添加 axis = 0 时,我得到:

TypeError: combine_first() got an unexpected keyword argument 'axis'

所以我不确定我的错误在哪里。

最佳答案

您需要稍微改变一下您的策略。 combine_first 在这里不合适。

而是使用concat,并将数据保存为DataFrame:

pd.concat([df, df.loc[['A']].shift(1, axis=1).rename(index={'A': 'A-1'})])

输出:

     2019  2020  2021  2022
A 10.0 20 30 40
A-1 NaN 10 20 30

以编程方式转移

如果您需要多次轮类,请以编程方式进行:

n = 3
df2 = pd.concat([df]+[(df.loc[['A']].shift(i+1, axis=1)
.rename(index={'A': f'A-{i+1}'})
) for i in range(n)])

输出:

     2019  2020  2021  2022
A 10.0 20.0 30.0 40
A-1 NaN 10.0 20.0 30
A-2 NaN NaN 10.0 20
A-3 NaN NaN NaN 10
使用系列

如果您真的只需要移动一行,使用 Series 会更容易:

n = 3
row = 'A'
s = df.loc[row]
df2 = pd.concat([s]+[s.shift(i+1).rename(f'{row}-{i+1}') for i in range(n)],
axis=1).T

输出:

     2019  2020  2021  2022
A 10.0 20.0 30.0 40
A-1 NaN 10.0 20.0 30
A-2 NaN NaN 10.0 20
A-3 NaN NaN NaN 10

关于python - 使用 pandas 移动一个值并创建一个新索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70590276/

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