【问题标题】:Shuffling a pandas dataframe改组熊猫数据框
【发布时间】:2020-11-09 18:52:25
【问题描述】:

我有以下数据框:

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' 然后不要洗牌。

谢谢

【问题讨论】:

  • 您可以轻松索引数据帧,使用sample 随机分配并返回。为什么要使用这个功能?
  • 我想说如果 column == 'B' 或 'C' 然后不要洗牌。或者您的意思是列 A 或 D 。最佳
  • 取出需要洗牌的列,然后重新赋值
  • @YOBEN_S 我确实想过,但如果可能的话,我想把它写到函数中
  • @yatu 你能举个例子吗?

标签: python pandas numpy


【解决方案1】:

您可以按如下方式随机排列所需的列:

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 列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2019-05-03
    • 2022-01-12
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多