пытается использовать панд loc
для подстановки фрейма данных critera и передачи значения другому столбцу.
инициализировать фрейм данных
import random
random.seed(100)
nums = 100
df = pd.DataFrame({'value':[random.randint(-7, 10) for x in range(nums)],
'id': [random.randint(500, 520) for x in range(nums)],
'prod': [random.choice(['carrots', 'apples', 'pears', 'corn', 'baby corn', 'peppers', 'jalapenos', 'chicken', 'beef', 'raddishes']) for x in range(nums)],
'region':[random.choice(['east', 'west', 'central', 'south']) for x in range(nums)],
'country':[random.choice(['us', 'ca', 'mx']) for x in range(nums)],
'tag': np.nan})
Я пытаюсь сделать что-то вроде "набора данных фильтра" по us
или ca
, но только в регионах east
и west
, где сумма значений в сгруппированных prod
и id
равна отрицательный.
выполняет следующие операции индексации фрейма данных по тому, что я только что сгруппировал, но я пытаюсь изолировать его по индексу.
df.groupby(['id', 'prod'])['value'].sum().loc[lambda x: x <0].head(10)
id prod
500 apples -6
carrots -6
corn -6
501 apples -3
chicken -2
502 beef -3
pears -2
503 chicken -3
504 jalapenos -4
505 chicken -4
Я пытался сделать что-то вроде:
df.loc[(df.country.isin(['us', 'ca'])) & (df.region.isin(['east', 'west'])) & (df.groupby(['id', 'prod'])['value'].sum().loc[lambda x: x <0]), 'tag'] = True
как использовать результат из сгруппированного фрейма данных в качестве фильтра в пандах loc
?