用groupby在熊猫数据框中随机播放列

fso*_*ety 2 python pandas

我想基于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的值也保持不变.

我想用熊猫来实现它.

DSM*_*DSM 9

为此,您可以组合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组中进行洗牌.