首页 > 解决方案 > 在熊猫数据框中使用不同的值移动每个索引的行

问题描述

以下是样本数据:

sample_col = ["col1","col2","col3","col4", "col5"]
sample_data = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]
sample = pd.DataFrame(data = data_data, columns = data_col)

sample

   col1  col2  col3  col4 col5
 0  1    2     3     4    5
 1  6    7     8     9    10
 2  11   12    13    14   15
 3  16   17    18    19   20
 
m = [0,1,2,1]

我需要将数据框样本中的每一行移动列表中的相应值m

输出应该是这样的

   col1  col2  col3  col4 col5
 0  1    2     3     4    5
 1  NaN  6     7     8    9
 2  NaN  NaN   11    12   13
 3  NaN  16    17    18   19

我知道我可以sample.iloc[i].shift(m[i])通过应用循环来一一或全部实现我想要的。但是我有一个非常大的数据集,需要很长时间才能完成。

那么有没有更好的方法来实现我想要做的事情?欢迎任何帮助。

标签: pythonpandas

解决方案


您可以使用布尔切片为每个移位操作仅选择感兴趣的行。如果setofm很大,它仍然会很慢,但比你拥有的要快。

import pandas as pd
import numpy as np

sample_col = ["col1","col2","col3","col4", "col5"]
sample_data = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]
sample = pd.DataFrame(data = sample_data, columns = sample_col)
m = [0,1,2,1]

marr = np.array(m)
for i in sorted(set(m)):
    if i==0:
        continue
    sample.loc[marr==i] = sample.loc[marr==i].shift(i, axis=1)

推荐阅读