Pandas新手我希望执行与Reduce number of levels for large categorical variables类似的操作(分类变量的分级以降低其级别) 以下代码在R
中正常工作DTsetlvls <- function(x, newl)
setattr(x, "levels", c(setdiff(levels(x), newl), rep("other", length(newl))))
我的数据框:
df = pd.DataFrame({'Color': 'Red Red Blue'.split(),
'Value': [100, 150, 50]})
df['Counts'] = df.groupby('Color')['Value'].transform('count')
print (df)
Color Value Counts
0 Red 100 2
1 Red 150 2
2 Blue 50 1
我手动创建聚合列,然后根据该列标记较不频繁的组,例如“蓝色”作为一个“其他”组。 但与简洁的R代码相比,这看起来很笨拙。这里的方法是什么?
答案 0 :(得分:2)
我认为您可以将value_counts
与numpy.where
一起使用,其中条件为isin
:
df['new'] = np.where(df.Color.isin(vals), 0,1)
print (df)
Color Value new
0 Red 11 0
1 Red 150 0
2 Blue 50 0
3 Red 30 0
4 Violet 10 1
5 Blue 40 0
df['new1'] = df.Color.where(df.Color.isin(vals), 'other')
print (df)
Color Value new1
0 Red 11 Red
1 Red 150 Red
2 Blue 50 Blue
3 Red 30 Red
4 Violet 10 other
5 Blue 40 Blue
或者,如果需要替换所有非顶级值,请使用where
:
class AlphaTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.driver.get("http://google.com/")
def asserTrueId(self, value):
self.assertTrue(self.driver.find_element_by_id(value))
time.sleep(1)
def test_flush_cache(self):
self.asserTrueId("block-menu-menu-menu-for-directories")