我想基于groupby随机调整数据帧的单个列的值.例如,我有两列A和B.现在,我想根据A上的groupby随机混洗B列.
例如,假设A中有三个不同的值.现在,对于A的每个不同值,我想要将B中的值混洗,但只是具有相同A的值.
输入示例:
A B
------------
1 1
1 3
2 4
3 6
1 2
3 5
Run Code Online (Sandbox Code Playgroud)
示例输出:
A B
------------
1 3
1 2
2 4
3 6
1 1
3 5
Run Code Online (Sandbox Code Playgroud)
在这种情况下,A=1B的值被洗牌.同样的事情也发生了A=2,但因为只有一排它就像它一样.对于A=3偶然的机会,B的值也保持不变.
我想用熊猫来实现它.
为此,您可以组合np.random.permutation(返回数组的混洗版本)和a groupby和a transform(返回组的类似索引的版本).例如:
>>> df
col1 col2
0 1 1
1 1 3
2 2 4
3 3 6
4 1 2
5 3 5
>>> df["col3"] = df.groupby("col1")["col2"].transform(np.random.permutation)
>>> df
col1 col2 col3
0 1 1 2
1 1 3 1
2 2 4 4
3 3 6 5
4 1 2 3
5 3 5 6
Run Code Online (Sandbox Code Playgroud)
请注意,这些值仅在其col1组中进行洗牌.