我有一个数据框:
df = pd.DataFrame([[0,4,0,0],
[1,5,1,0],
[2,6,0,0],
[3,7,1,0]], columns=['index', 'A', 'class', 'label'])
df:
指数 | 一种 | 类 | 标签 |
---|---|---|---|
0 | 4 | 0 | 0 |
1个 | 5 | 1个 | 0 |
2 | 6 | 0 | 0 |
3 | 7 | 1个 | 0 |
我想将标签更改为1,如果类0的行的A列的平均值大于A列中所有数据的平均值?
如何在几行代码中做到这一点?
我试过了但是没用:
if df[df['class'] == 0]['A'].mean() > df['A'].mean():
df[df['class']]['lable'] = 1
使用以下,获得各组的,检查是否大于,并且该系列以与分配到:pandas.DataFrame.groupby
'class'
groupby.mean
'A'
df['A'].mean()
pandas.Series.map
boolean
astype
(int)
df['class']
df['label']
>>> df['label'] = df['class'].map(
df.groupby('class')['A'].mean() > df['A'].mean()
).astype(int)
>>> df
index A class label
0 0 4 0 0
1 1 5 1 1
2 2 6 0 0
3 3 7 1 1
由于您只检查class
== 0,你需要添加另一个boolean mask
上df['class']
:
>>> df['label'] = (df['class'].map(
df.groupby('class')['A'].mean() > df['A'].mean()
) & (~df['class'].astype(bool))
).astype(int)
index A class label
0 0 4 0 0
1 1 5 1 0 # because (5+7)/2 < (4+5+6+7)/4
2 2 6 0 0
3 3 7 1 0 # because (5+7)/2 < (4+5+6+7)/4
因此,即使您的代码有效,您也不会知道,因为条件无法满足。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句