numpy Pandas相当于麻木.打滚

zbsbpyhn  于 2023-02-04  发布在  其他
关注(0)|答案(2)|浏览(128)

我有一个Pandas数据框,我想添加一个新列,它包含现有列的内容,但相对于数据框的其余部分进行了移动。我还想将从底部下降的值滚动到顶部。
例如,如果这是我的 Dataframe :

>>> myDF
   coord  coverage
0      1         1
1      2        10
2      3        50

我想得到这个:

>>> myDF_shifted
   coord  coverage  coverage_shifted
0      1         1                50
1      2        10                 1
2      3        50                10

(This只是一个简化的示例-在真实的生活中,我的 Dataframe 更大,我需要移动不止一个单位)
这是我试过的,得到的结果:

>>> myDF['coverage_shifted'] = myDF.coverage.shift(1)
>>> myDF
   coord  coverage  coverage_shifted
0      1         1               NaN
1      2        10                 1
2      3        50                10

我可以创建移位列,但我不知道如何将底部值滚动到顶部。从互联网搜索来看,我认为numpy可以让你用“numpy.roll”来做这件事。有Pandas的等价物吗?

ccgok5k5

ccgok5k51#

Pandas可能没有提供现成的方法来完成您所描述的任务,但是如果您可以稍微移动一下,numpy具有exactly that
在您的情况下,它是:

import numpy as np
myDF['coverage_shifted'] = np.roll(df.coverage, 2)
nnsrf1az

nnsrf1az2#

您可以向shift()传递一个额外的参数来实现您想要的结果。

last_value = myDF.iloc[-1]['coverage']
myDF['coverage_shifted'] = myDF.coverage.shift(1, fill_value=last_value)

您必须手动为fill_value提供值
这同样可以应用于反向轧制

first_value = myDF.iloc[0]['coverage']
myDF['coverage_back_shifted'] = myDF.coverage.shift(-1, fill_value=first_value)

相关问题