gpt4 book ai didi

python - 在 Pandas Dataframe 中移动/移动值

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:24 32 4
gpt4 key购买 nike

假设一个数据框df的例子:

    A
0 4.3
1 75
2 8.5
3 4.0
4 98

我需要将每个值从 A 列移动到每一列 - 每列一个值:

  • 从第二个值开始:移动到第二列B
  • 第三列的第三个值 C,
  • 等等...

期望的输出:

    A     B    C   D   E
0 4.3 NaN NaN NaN NaN
1 NaN 75 NaN NaN NaN
2 NaN NaN 8.5 NaN NaN
3 NaN NaN NaN 4.0 NaN
4 NaN NaN NaN Nan 98

一个想法是将每个值复制到第二列,然后在前一列中将其删除,或者将值从一列转移到另一列,但我不确定如何应用此...

MWE

import pandas as pd
import numpy as np

df=pd.DataFrame(data=np.random.randint(0,100,(5,5)), columns=['A','B','C','D','E'])
df.iloc[:,1:] =np.nan

df.iloc[[1],[1]] = df.iloc[[1],[0]]
df.iloc[[1],[1]] = df.iloc[[1],[0]].shift(1,axis=1)

最佳答案

In [76]: import string

In [77]: r = pd.DataFrame(np.eye(len(df)),
columns=list(string.ascii_uppercase[:len(df)])) \
.replace(0, np.nan) * df.A.values

In [78]: r
Out[78]:
A B C D E
0 4.3 NaN NaN NaN NaN
1 NaN 75.0 NaN NaN NaN
2 NaN NaN 8.5 NaN NaN
3 NaN NaN NaN 4.0 NaN
4 NaN NaN NaN NaN 98.0

或更好:

In [11]: r = pd.DataFrame(index=df.index, columns=list(string.ascii_uppercase[:len(df)]))

In [12]: np.fill_diagonal(r.values, df.A)

In [13]: r
Out[13]:
A B C D E
0 4.3 NaN NaN NaN NaN
1 NaN 75 NaN NaN NaN
2 NaN NaN 8.5 NaN NaN
3 NaN NaN NaN 4 NaN
4 NaN NaN NaN NaN 98

更新:

how to "move" single value

我们可以使用Series.shift方法。

水平移动:

In [94]: r.loc[1] = r.loc[1].shift(3)

In [95]: r
Out[95]:
A B C D E
0 4.3 NaN NaN NaN NaN
1 NaN NaN NaN NaN 75.0
2 NaN NaN 8.5 NaN NaN
3 NaN NaN NaN 4.0 NaN
4 NaN NaN NaN NaN 98.0

垂直移动:

In [96]: r.loc[:, 'D'] = r.loc[:, 'D'].shift(-2)

In [97]: r
Out[97]:
A B C D E
0 4.3 NaN NaN NaN NaN
1 NaN NaN NaN 4.0 75.0
2 NaN NaN 8.5 NaN NaN
3 NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN 98.0

注意 shift 将移动整个 行/列,但是一旦我们在每一行/列中只有一个值,这将工作。

关于python - 在 Pandas Dataframe 中移动/移动值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44221273/

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