Python 在dataframe中随机选择两个值,不重复
考虑具有N列和M行的数据帧df: 我想随机选择两列,然后随机选择一行,这将给我两个相同行的值。我可以使用Python 在dataframe中随机选择两个值,不重复,python,pandas,Python,Pandas,考虑具有N列和M行的数据帧df: 我想随机选择两列,然后随机选择一行,这将给我两个相同行的值。我可以使用 >>> df.sample(2, axis=1).sample(1,axis=0) e a 1 3 5 我想执行以下K次: >>> for i in xrange(5): ... df.sample(2, axis=1).sample(1,axis=0) ... e a 1 3 5 d b 2 1 9 e
>>> df.sample(2, axis=1).sample(1,axis=0)
e a
1 3 5
我想执行以下K次:
>>> for i in xrange(5):
... df.sample(2, axis=1).sample(1,axis=0)
...
e a
1 3 5
d b
2 1 9
e b
4 8 9
c b
0 6 5
e c
1 3 5
我希望通过在任何试验中选择相同的两列和相同的行来确保我不会选择相同的两个值。我将如何实现这一点
然后,我想在每次试验中对所选的两个值执行按位异或操作。例如,3^5,1^9。。并计算所选值中的所有位差异。您可以创建一个由两列元组组成的所有索引列表。然后从中随机选择,无需替换 样本数据 密码 然后,您可以决定您希望输出的确切程度,但类似的内容与您所展示的内容非常接近:
pd.concat([df.loc[myid[0], list(myid[1])].reset_index().T for myid in idx])
# 0 1
#index a e
#9 4 8
#index a e
#2 1 1
#index a c
#1 7 1
#index b e
#3 2 3
#index d e
#8 5 7
你能用一个随机期望的df样本创建一个合适的df吗?有了解释,现在还不是很清楚,你可以用if语句做一个简单的检查,看看在对df重新采样后,col1中的值是否=col2中的值。如果是这样,那么选择一个不同的样本,否则就用你的值做任何你想做的事情。现在这似乎是一个显而易见的简单答案,您是否在寻找一个考虑到时间复杂度权衡和代码风格的python方法等的答案?选择K个随机整数,不替换范围为[0,N*N-1].@anky_91我已经用df和示例更新了问题。@Teddy我不想检查这些值是否相同。但我想确保在两次试验之间不会对相同的列和行进行采样。例如,我不希望e列中的3和5以及a列和第1行中的3和5被选择两次。但是e列和c列第1行的3和5可以。
import pandas as pd
import numpy as np
from itertools import combinations, product
np.random.seed(123)
df = pd.DataFrame(np.random.randint(1, 10, (10, 5)), columns=list('abcde'))
#df = df.reset_index() #if index contains duplicates
K = 5
choices = np.array(list(product(df.index, combinations(df.columns, 2))))
idx = choices[np.r_[np.random.choice(len(choices), K, replace=False)]]
#array([[9, ('a', 'e')],
# [2, ('a', 'e')],
# [1, ('a', 'c')],
# [3, ('b', 'e')],
# [8, ('d', 'e')]], dtype=object)
pd.concat([df.loc[myid[0], list(myid[1])].reset_index().T for myid in idx])
# 0 1
#index a e
#9 4 8
#index a e
#2 1 1
#index a c
#1 7 1
#index b e
#3 2 3
#index d e
#8 5 7