Python 为了审计目的而对唯一值进行迭代?
假设我们在dataframe df2中有一个独特类别的列表:Python 为了审计目的而对唯一值进行迭代?,python,pandas,loops,loc,Python,Pandas,Loops,Loc,假设我们在dataframe df2中有一个独特类别的列表: categories = df2['Category'].unique() 我想循环df2中的每个类别,将其与上面的变量类别匹配,并应用lambda函数。语法是什么 我尝试了以下方法: df2.loc[df2.Category == categories, :].apply(lambda x: x.sample(n=3) if x.size*0.01 < 3 else x.sample(frac=0.01)) 我认为,我得
categories = df2['Category'].unique()
我想循环df2中的每个类别,将其与上面的变量类别匹配,并应用lambda函数。语法是什么
我尝试了以下方法:
df2.loc[df2.Category == categories, :].apply(lambda x: x.sample(n=3) if
x.size*0.01 < 3 else x.sample(frac=0.01))
我认为,我得到的错误是因为df.Category比categories长,因为df.Category是所有类别的列表,这些类别都是重复的,这就是我尝试.unique()的原因。有没有办法解决这个问题,让我的代码正常工作?谢谢你抽出时间 以下是我的建议:
#我复制数据集
作为pd进口熊猫
将numpy作为np导入
np.随机种子(123)
df1=pd.DataFrame({“Category”:np.arange(0,20)。重复(5),
“值”:np.random.random(20*5)})
df2=pd.DataFrame({“Category”:np.arange(20,40)。重复(500),
“值”:np.random.random(20*500)})
df=pd.concat([df1,df2])#我对这两个进行concat以获得不同的类别大小
df2=(df.groupby(“类别”)。如果x.size*0.01<3,则应用(λx:x.sample(n=3
其他x.样本(分数=0.01))
.drop(columns=“Category”))
您可以看到,您得到了一个包含类别的多重索引,以及样本中每个类别的观察值索引。从0到19的类别有3个样本,上述类别有5个样本
value
Category
0 1 0.286139
4 0.719469
2 0.226851
1 9 0.392118
7 0.684830
df2['Category'].unique()
是一个您可能需要使用的列表isin
,但从理论上讲,df2['Category]
中的每个值都将返回True…您的预期输出是什么?我试图从数据帧中的每个类别中获取样本,而不是从整个数据帧中获取样本。
value
Category
0 1 0.286139
4 0.719469
2 0.226851
1 9 0.392118
7 0.684830