python - 将相同的随机值分配给 python Dataframe 中的 A-B , B-A 对

标签 python pandas dataframe

我有一个类似的数据框

 Sou  Des
  1    3
  1    4
  2    3
  2    4
  3    1
  3    2
  4    1
  4    2

我需要为 0 和 1 之间的每一对分配随机值,但必须为两个相似的对(如“1-3”、“3-1”和其他对)分配相同的随机值。我期待一个像

这样的结果数据框
 Sou  Des   Val
  1    3    0.1
  1    4    0.6
  2    3    0.9
  2    4    0.5
  3    1    0.1
  3    2    0.9
  4    1    0.6
  4    2    0.5

如何在 python pandas 中分配相同的随机值相似对,如“A-B”和“B-A”。

最佳答案

让我们首先创建一个按 axis=1 排序的助手 DF:

In [304]: x = pd.DataFrame(np.sort(df, axis=1), df.index, df.columns)

In [305]: x
Out[305]:
   Sou  Des
0    1    3
1    1    4
2    2    3
3    2    4
4    1    3
5    2    3
6    1    4
7    2    4

现在我们可以按列分组:

In [306]: df['Val'] = (x.assign(c=1)
                        .groupby(x.columns.tolist())
                        .transform(lambda x: np.random.rand(1)))

In [307]: df
Out[307]:
   Sou  Des       Val
0    1    3  0.989035
1    1    4  0.918397
2    2    3  0.463653
3    2    4  0.313669
4    3    1  0.989035
5    3    2  0.463653
6    4    1  0.918397
7    4    2  0.313669

关于python - 将相同的随机值分配给 python Dataframe 中的 A-B , B-A 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48969151/

相关文章:

python - 将 Flightradar24 API 转换为 pandas 数据帧

java - 是否有用于数据完整性验证的标准 DSL?

python - Django:语音到文本应用程序

python - 使用 sqlalchemy 从 PostgreSQL 查询返回 Pandas 数据框

python - 在 Python 中计算 CSV 中的每月总值

python - 如何使用时间在 datetimeIndex 数组中进行索引

python - 如何将 sandbox.paypal 站点更改为 django-merchant 中的 paypal 站点?

python - tkinter Treeview行显示值与下划线的差异

python - Pandas :如果 A 列中的行包含 "x",则将 "y"写入 B 列中的行

r - 根据条件选择和修改数据框中的行