改组熊猫数据框

时间:2020-07-20 13:45:25

标签: python pandas numpy

我有以下数据框:

df = pd.DataFrame({'A':range(10), 'B':range(10), 'C':range(10), 'D':range(10)})

我想使用以下功能对数据进行洗牌:

import pandas as pd

import numpy as np

def shuffle(df, n=1, axis=0):
    df = df.copy()
    for _ in range(n):
        df.apply(np.random.shuffle, axis=axis)
        return df

但是,我不想只对A和D列进行洗牌,而是对B和C列进行洗牌。是否可以通过修改功能来做到这一点?我想说的是,如果column =='A'或'D'那么就不要洗牌。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以按如下所示重新排列所需的列:

import numpy as np
import pandas as pd

# the data 
df = pd.DataFrame({'A':range(10), 'B':range(10), 
     'C':range(10), 'D':range(10)}) 

# shuffle 
df.B = np.random.permutation(df.B)
df.C =  np.random.permutation(df.C) 

# or shuffle this way (in place)
np.random.shuffle(df.B)
np.random.shuffle(df.C)

如果您需要使用随机播放功能进行随机播放:

def shuffle(df, n=1):

   for _ in range(n):
        # shuffle B
        np.random.shuffle(df.B)
        # shuffle C
        np.random.shuffle(df.C)
        print(df.B,df.C)   # comment this out as needed

    return df

您无需打扰A和D列。