我有以下数据框:
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'那么就不要洗牌。
谢谢
答案 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列。