如何通过 Pandas 中的循环移动所有列?
How to shift all columns through a loop in Pandas?
我是 Python 和 Pandas 的新手,我希望有人能帮助我。我有以下数据框:
import pandas as pd
from pandas import Timestamp
pd.DataFrame({'timestamp': {0: Timestamp('2021-06-01 00:00:00'),
1: Timestamp('2021-06-01 01:00:00'),
2: Timestamp('2021-06-01 02:00:00'),
3: Timestamp('2021-06-01 03:00:00'),
4: Timestamp('2021-06-01 04:00:00')},
'column_0': {0: 384.0,
1: 389.0,
2: 352.0,
3: 352.0,
4: 356.0},
'column_1': {0: 386.0,
1: 352.0,
2: 352.0,
3: 356.0,
4: 375.0},
'column_2': {0: 352.0,
1: 352.0,
2: 356.0,
3: 375.0,
4: 365.0},
'column_3': {0: 350.0,
1: 356.0,
2: 375.0,
3: 365.0,
4: 358.0},
'column_4': {0: 359.0,
1: 375.0,
2: 365.0,
3: 358.0,
4: 347.0})
timestamp column_0 column_1 column_2 column_3 column_4
0 2021-06-01 00:00:00 384.0 386.0 352.0 350.0 359.0
1 2021-06-01 01:00:00 389.0 352.0 352.0 356.0 375.0
2 2021-06-01 02:00:00 352.0 352.0 356.0 375.0 365.0
3 2021-06-01 03:00:00 352.0 356.0 375.0 365.0 358.0
4 2021-06-01 04:00:00 356.0 375.0 365.0 358.0 347.0
我想要做的是将column_1中的数字向下移动一行,在column_2[=28=中] 向下两行,在 column_3 向下 3 行等等。
我知道这可以用代码完成
df['column_1'].shift(+1)
df['column_2'].shift(+2)
...
手动的方法太麻烦了,实际上总共有40多个这样的列。这就是为什么我想添加一个循环,这样代码就不会太长。
最后数据框应该是这样的:
timestamp column_0 column_1 column_2 column_3 column_4
0 2021-06-01 00:00:00 384.0 NaN NaN NaN NaN
1 2021-06-01 01:00:00 389.0 386.0 NaN NaN NaN
2 2021-06-01 02:00:00 352.0 352.0 352.0 NaN NaN
3 2021-06-01 03:00:00 352.0 352.0 352.0 350.0 NaN
4 2021-06-01 04:00:00 356.0 356.0 356.0 356.0 359.0
...
有人知道怎么做吗?我不是很擅长编程,到目前为止我的尝试都失败了。如果有任何帮助,我将不胜感激。
您可以使用 df.columns
访问列名的有序序列。从那里可以快速迭代它们并在 enumerate
的帮助下移动列。由于您的第一列是您的时间戳,因此将枚举起始值设置为 -1 以对齐列移位。
for i, col in enumerate(df.columns, -1):
if i > 0:
df[col] = df[col].shift(i)
我是 Python 和 Pandas 的新手,我希望有人能帮助我。我有以下数据框:
import pandas as pd
from pandas import Timestamp
pd.DataFrame({'timestamp': {0: Timestamp('2021-06-01 00:00:00'),
1: Timestamp('2021-06-01 01:00:00'),
2: Timestamp('2021-06-01 02:00:00'),
3: Timestamp('2021-06-01 03:00:00'),
4: Timestamp('2021-06-01 04:00:00')},
'column_0': {0: 384.0,
1: 389.0,
2: 352.0,
3: 352.0,
4: 356.0},
'column_1': {0: 386.0,
1: 352.0,
2: 352.0,
3: 356.0,
4: 375.0},
'column_2': {0: 352.0,
1: 352.0,
2: 356.0,
3: 375.0,
4: 365.0},
'column_3': {0: 350.0,
1: 356.0,
2: 375.0,
3: 365.0,
4: 358.0},
'column_4': {0: 359.0,
1: 375.0,
2: 365.0,
3: 358.0,
4: 347.0})
timestamp column_0 column_1 column_2 column_3 column_4
0 2021-06-01 00:00:00 384.0 386.0 352.0 350.0 359.0
1 2021-06-01 01:00:00 389.0 352.0 352.0 356.0 375.0
2 2021-06-01 02:00:00 352.0 352.0 356.0 375.0 365.0
3 2021-06-01 03:00:00 352.0 356.0 375.0 365.0 358.0
4 2021-06-01 04:00:00 356.0 375.0 365.0 358.0 347.0
我想要做的是将column_1中的数字向下移动一行,在column_2[=28=中] 向下两行,在 column_3 向下 3 行等等。
我知道这可以用代码完成
df['column_1'].shift(+1)
df['column_2'].shift(+2)
...
手动的方法太麻烦了,实际上总共有40多个这样的列。这就是为什么我想添加一个循环,这样代码就不会太长。 最后数据框应该是这样的:
timestamp column_0 column_1 column_2 column_3 column_4
0 2021-06-01 00:00:00 384.0 NaN NaN NaN NaN
1 2021-06-01 01:00:00 389.0 386.0 NaN NaN NaN
2 2021-06-01 02:00:00 352.0 352.0 352.0 NaN NaN
3 2021-06-01 03:00:00 352.0 352.0 352.0 350.0 NaN
4 2021-06-01 04:00:00 356.0 356.0 356.0 356.0 359.0
...
有人知道怎么做吗?我不是很擅长编程,到目前为止我的尝试都失败了。如果有任何帮助,我将不胜感激。
您可以使用 df.columns
访问列名的有序序列。从那里可以快速迭代它们并在 enumerate
的帮助下移动列。由于您的第一列是您的时间戳,因此将枚举起始值设置为 -1 以对齐列移位。
for i, col in enumerate(df.columns, -1):
if i > 0:
df[col] = df[col].shift(i)