是否可以在其中“ X”的仓基于其他列的值的数据框中创建新列。下面的例子。
AR1,PO1和RU1的容器彼此不同。
到现在为止,我只能获取“ X”中所有值的垃圾箱。
import pandas as pd
import numpy as np
import string
import random
N = 100
J = [2012,2013,2014]
K = ['A','B','C','D','E','F','G','H']
L = ['h','d','a']
S = ['AR1','PO1','RU1']
np.random.seed(0)
df = pd.DataFrame(
{'X': np.random.uniform(1,10,N),
'Y': np.random.uniform(1,10,N),
'J':np.random.choice(J, N),
'R':np.random.choice(L, N),
'S':np.random.choice(S,N)
})
df['bins_X'] = pd.qcut(df['X'], 10)
print(df.head())
我想要的输出:
编辑;
在我的真实数据上,我得到一个ValueError:边缘不是唯一的。我可以用等级来解决这个问题吗?我如何将其添加到建议的解决方案中?
最佳答案
在pd.qcut
上的groupby
中简单使用S
df['bins_X'] = df.groupby('S').X.apply(pd.qcut, q=10, labels=np.arange(10))
df.groupby(['bins_X', 'S']).size().unstack()
S AR1 PO1 RU1
bins_X
0 3 4 4
1 3 3 4
2 3 3 4
3 2 3 4
4 3 4 4
5 3 3 3
6 2 3 4
7 3 3 4
8 3 3 4
9 3 4 4
如果希望它们具有自己的独特边缘,请保留
labels
参数df['bins_X'] = df.groupby('S').X.apply(pd.qcut, q=10)
关于python - 有条件的装箱,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41303633/