gpt4 book ai didi

python - 从数据框中选择随机值,以便生成的数据框在 python-pandas 的两列中是唯一的

转载 作者:行者123 更新时间:2023-12-01 07:11:04 25 4
gpt4 key购买 nike

考虑数据框:

data = [['G1','P1',0.3], ['G1','P2',0.3], ['G1','P3',0.3],['G2','P1',0.3],['G2','P2',0.3],['G3','P2',0.3]] 
df2 = pd.DataFrame(data, columns = ['GT', 'PRED','ACC'])

df2 看起来像这样:

    GT  PRED    ACC
0 G1 P1 0.3
1 G1 P2 0.3
2 G1 P3 0.3
3 G2 P1 0.3
4 G2 P2 0.3
5 G3 P2 0.3

目标是选择随机行,以便唯一地选择 GT 和 PRED 中的值。从其他堆栈溢出搜索中,我有以下代码:

size = 1        # sample size
replace = False # with replacement
fn = lambda obj: obj.loc[np.random.choice(obj.index, size, replace),:]
pt = df2.groupby('PRED', as_index=False).apply(fn)

其输出是

    GT  PRED    ACC
0 G1 P1 0.3
1 G1 P2 0.3
2 G1 P3 0.3

我的预期输出应该是

    GT  PRED    ACC
0 G1 P3 0.3
1 G2 P1 0.3
2 G3 P2 0.3

即在过滤时,我们确保 GT 和 PRED 是唯一的。我可以通过在 for a 循环中生成 df 后应用函数来确保这一点。我想避免这种情况。

最佳答案

这可能是一种方法。

  1. 使用 'GT''PRED' 列的唯一值创建数组。它们可以使用 unique 获得方法。
  2. 使用numpy shuffle打乱每个数组(这会给你随机性)。
  3. 使用打乱后的数组创建数据框。该数组的每一行都是一对随机选择的 'GT''PRED' 唯一值。
  4. 使用 pandas apply 和一些 bool 逻辑,搜索 df2 中的哪些行具有有效的 'GT''PRED' 对,即存在于 pairs 数据帧中的一对。
  5. 仅从 df2 中选择这些行来获取输出。

翻译成工作代码是:

gt_u = df2['GT'].unique()
pred_u = df2['PRED'].unique()

np.random.shuffle(gt_u)
np.random.shuffle(pred_u)

pairs = pd.DataFrame({'GT':gt_u, 'PRED':pred_u})
#pairs = pd.DataFrame([[x, y] for x, y in zip(gt_u, pred_u)], columns=['GT', 'PRED'])

sel = df2.apply(lambda x : (x[['GT', 'PRED']] == pairs).all(axis=1).any(axis=0), axis=1)
out = df2.loc[sel]

注意:如果您不确定唯一数组的长度是否相等,请使用注释行生成

关于python - 从数据框中选择随机值,以便生成的数据框在 python-pandas 的两列中是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58215002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com