Подскажите плиз по основам pandas: начал недавно изучать, пытаюсь набить руку - переписать скрипты по работе, но столкнулся с определенным затыком.
Требуется примерно такое поведение:
lst =[['n1', 1, 2, 3], ['n2', 11, 22, 33], ['n1', 1,222, 333], ['n2', 11, 333, 5]] res = {} for line in lst: name = ':'.join(map(str, line[0:2])) res.setdefault(name, 0) res[name] += line[2] if line[3] < 10 else 0 print(res)
df = pd.DataFrame([['n1', 1, 2, 3], ['n2', 11, 22, 33], ['n1', 1,222, 333], ['n2', 11, 333, 5]], columns=['nm1', 'nm2', 'v1', 'v2']) df['name'] = df.iloc[:, :2].apply(lambda r: ':'.join(r.values.astype(str)), axis=1)
Пробую тупо фильтровать:
df_filtered = df.loc[:, df['v2'] < 10] # IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match). df_filtered = df[df['v2'] < 10] # работает без ошибки
Дальше написал:
names = df_filtered.groupby('name')['v1'].sum()
df['v11'] = df['v1'] df['v11'][df['v2'] > 10] = 0 names = df.groupby('name')['v11'].sum()
, но как-то криво воспринимается - явно должен быть более правильный способ. Подскажите плиз, как такая операция грамотно выполняется и в чем причина IndexingError? Заранее благодарю.