Я немного отредактировал ваши демонстрационные данные, чтобы создать рабочий пример.
Date ProductCode Weekly_Units_Sold
2015-08-09 1 46.0
2015-08-09 2 46.0
2015-08-09 3 31.0
2015-08-09 317 47.0
2015-08-16 1 0
2015-08-16 2 46.0
2015-08-16 3 31.0
2015-08-16 317 75.0
2015-08-23 1 0.0
2015-08-23 2 90.0
2015-08-23 3 175.0
2015-08-23 317 20.0
2015-12-27 1 0.0
2015-12-27 2 30.0
2015-12-27 3 150.0
2015-12-27 317 20.0
Здесь мы начинаем с pd.read_clipboard () на вышеуказанных данных.
df = pd.read_clipboard()
print(df)
Date ProductCode Weekly_Units_Sold
0 2015-08-09 1 46.0
1 2015-08-09 2 46.0
2 2015-08-09 3 31.0
3 2015-08-09 317 47.0
4 2015-08-16 1 0.0
5 2015-08-16 2 46.0
6 2015-08-16 3 31.0
7 2015-08-16 317 75.0
8 2015-08-23 1 0.0
9 2015-08-23 2 90.0
10 2015-08-23 3 175.0
11 2015-08-23 317 20.0
12 2015-12-27 1 0.0
13 2015-12-27 2 30.0
14 2015-12-27 3 150.0
15 2015-12-27 317 20.0
Мы группируем по ProductCode и создаем строковые списки всех значений Weekly_Units_Sold в столбце Weekly_Units_Sold. -нулевые значения.
df_gb['non_zero_lt_two'] = df_gb['Weekly_Units_Sold'].apply(lambda x: True if np.count_nonzero(np.array(x)) < 2 else False)
print (df_gb)
Weekly_Units_Sold non_zero_lt_two
ProductCode
1 [46.0, 0.0, 0.0, 0.0] True
2 [46.0, 46.0, 90.0, 30.0] False
3 [31.0, 31.0, 175.0, 150.0] False
317 [47.0, 75.0, 20.0, 20.0] False
Затем мы можем превратить строки значений True в список.
prod_code_list = df_gb.index[df_gb['non_zero_lt_two'] == True].tolist()
И, наконец, удалите нужные строки из исходного df.
df = df[~df['ProductCode'].isin(prod_code_list)]
print(df)
Date ProductCode Weekly_Units_Sold
1 2015-08-09 2 46.0
2 2015-08-09 3 31.0
3 2015-08-09 317 47.0
5 2015-08-16 2 46.0
6 2015-08-16 3 31.0
7 2015-08-16 317 75.0
9 2015-08-23 2 90.0
10 2015-08-23 3 175.0
11 2015-08-23 317 20.0
13 2015-12-27 2 30.0
14 2015-12-27 3 150.0
15 2015-12-27 317 20.0