我有一个类似的数据框
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/