更改熊猫数据框中随机选择的行的顺序

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)。我只是放了种子,以便有人可以完全复制上面的示例。您可以将其保留在您的代码中以实现可重复性和调试,但这不是必需的

以上是关于更改熊猫数据框中随机选择的行的顺序的主要内容,如果未能解决你的问题,请参考以下文章

比较熊猫数据框中的行值

比较熊猫数据框中的行值

如何在 Pandas 数据框中的特定位置插入一列? (更改熊猫数据框中的列顺序)

按给定列表的顺序选择重复的熊猫数据框行并保留原始索引

确定熊猫数据框中的列值何时更改

从熊猫数据框中选择特定行