首页 > 解决方案 > 循环数据框以通过递增值来移动列

问题描述

我正在尝试创建一个循环,该循环将采用转置的数据帧并执行以下操作:

  1. 将第一列下移 1
  2. 将第二列下移 2
  3. 将第三列下移 3
  4. 将第四列下移 4
  5. 用 np.nan 填空
  6. 添加由移位列产生的其他行名

期望的结果视觉包括在下面。

这是我的代码:

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

date_today = datetime.now()
days = pd.date_range(date_today, date_today + timedelta(3), freq='D')

np.random.seed(seed=1111)
data = np.random.randint(1, high=100, size=len(days))
data1 = np.random.randint(1, high=100, size=len(days))
data2 = np.random.randint(1, high=100, size=len(days))
data3 = np.random.randint(1, high=100, size=len(days))
df = pd.DataFrame({'Date': days, 'col2': data, 'col3': data1, \
                   'col4': data2, 'col5': data3})
df = df.set_index('Date')

df= df.T


## loop to shift rows down and fill with np.nan
#for i in range(0, df.shape[1]):
#    df = df.shift(1)  

print(df)

期望的结果视觉

标签: pythondataframe

解决方案


您可以枚举列名并将其传递给移位函数 (+1),因为它从零开始。

for c, col in enumerate(df.columns):
    df[col] = df[col].shift(c+1)

推荐阅读