【问题标题】:Randomly selecting rows where the columns should switch values in a DataFrame随机选择列应在 DataFrame 中切换值的行
【发布时间】:2018-06-09 09:06:47
【问题描述】:

给定这样的 DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': np.ones(5), 'B': np.zeros(5), 'C': np.ones(5), 'D': np.zeros(5)})

我希望能够随机选择一些行,其中 A 和 B 值以及它们对应的 C 和 D 值 - 但不是 E 和 F 列 - 切换,以便 B 列值放入 A列,反之亦然。

所以不是整行,而是只有某些列应该切换(A、B、C、D),而 E 和 F 保持它们的值。

有人对如何实现这一点有任何想法吗?

【问题讨论】:

  • 欢迎来到 StackOverflow。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。
  • @jezrael 显然我的尝试是 OP 所要求的,所以现在你可以发挥你的魔力了 :)
  • @roganjosh - 答案很好,+1
  • @jezrael 天哪,我对此感到非常惊讶。我以为有一些我不知道的隐藏方法。谢谢:)
  • 不,对于像 OP 这样的交换行需要在这里 pandas 没有方法 :)

标签: python python-3.x pandas dataframe shuffle


【解决方案1】:

我认为肯定有比在此处复制Series 更有效的方法:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': np.ones(5), 'B': np.zeros(5), 'C': np.ones(5), 'D': np.zeros(5)})

rows_to_swap = np.random.choice(len(df), size=3, replace=False)

a_column = df['A'].copy()
b_column = df['B'].copy()

df.loc[rows_to_swap, 'A'] = b_column[rows_to_swap]
df.loc[rows_to_swap, 'B'] = a_column[rows_to_swap]

【讨论】:

  • 感谢您的意见!我认为您正确选择了 A 和 B 的随机选择和切换,但我也希望 C 和 D 列进行相同的切换,而 E 和 F 列保持不变。更具体地说,C 应该跟随 A,D 应该跟随 B。我想这可能只是在 a_column/b_column 变量中包含 C 和 D 的问题,但我得到了一些 KeyErrors。我会试着修改一下!
  • @dfunch 是的,用我的方法它只会扩展到列 C 和 D,因为选择的行是固定的。
猜你喜欢
  • 2017-03-20
  • 2017-01-13
  • 1970-01-01
  • 2020-02-29
  • 2019-08-19
  • 2018-09-24
  • 2019-07-30
  • 2021-10-28
  • 1970-01-01
相关资源
最近更新 更多