更改熊猫数据框中随机选择的行的顺序
Posted
技术标签:
【中文标题】更改熊猫数据框中随机选择的行的顺序【英文标题】:Change order of randomly selected rows within a pandas dataframe 【发布时间】:2020-12-09 23:21:00 【问题描述】:我有一个看起来像这样的熊猫数据框:
c1 c2 c3 c4 result
a b c d 1
b c d a 1
a e d b 1
g a f c 1
但我想随机选择 50% 的行来交换顺序,并将结果列从 1 翻转为 0(如下所示):
c1 c2 c3 c4 result
a b c d 1
d a b c 0 (we swapped c3 and c4 with c1 and c2)
a e d b 1
f c g a 0 (we swapped c3 and c4 with c1 and c2)
实现这一点的惯用方法是什么?
【问题讨论】:
对于所有被交换的行是否总是交换相同的列? (实现起来要简单得多:D) @ALollz 是的,我将始终将 c1 和 c2 与 c3 和 c4 交换。对于我们随机选择的行,也将始终将最后一列从 1 更改为 0 到目前为止我最好的猜测是我需要以某种方式将数据帧分成两半,修改 1 然后重新组合它们?我真的没有看到任何方法可以只修改数据框中的某些行 【参考方案1】:你有大致的想法。打乱 DataFrame 并将其分成两半。然后修改一半并重新加入。
import numpy as np
np.random.seed(410112)
dfs = np.array_split(df.sample(frac=1), 2) # Shuffle then split in 1/2
# On one half set result to 0 and swap the columns
dfs[1]['result'] = 0
dfs[1] = dfs[1].rename(columns='c1': 'c2', 'c2': 'c1', 'c3': 'c4', 'c4': 'c3')
# Join Back
df = pd.concat(dfs).sort_index()
c1 c2 c3 c4 result
0 a b c d 1
1 c b a d 0
2 e a b d 0
3 g a f c 1
【讨论】:
您发布的代码中是否包含随机播放?另外,想知道您是否有理由为 np.random 选择静态种子?我将这些数据输入到 tensorflow 中,所以我应该使用静态种子,以便我可以获得关于模型质量的一致反馈吗? @lexxish 洗牌在sample(frac=1)
。我只是放了种子,以便有人可以完全复制上面的示例。您可以将其保留在您的代码中以实现可重复性和调试,但这不是必需的以上是关于更改熊猫数据框中随机选择的行的顺序的主要内容,如果未能解决你的问题,请参考以下文章