我有一个数据框,其中的“材料”列表示产品代码,“值”列对应产品值,“月”列对应月份。
Year Month Materiais Values
0 2018 M1 52745 NaN
1 2018 M2 52745 NaN
2 2018 M3 52745 NaN
3 2018 M4 52745 NaN
4 2018 M5 52745 NaN
5 2018 M6 52745 NaN
6 2018 M7 52745 NaN
7 2018 M1 58859 NaN
8 2018 M2 58859 NaN
9 2018 M3 58859 NaN
10 2018 M4 58859 NaN
11 2018 M5 58859 300
12 2018 M6 58859 NaN
13 2018 M7 58859 NaN
14 2018 M1 57673 NaN
15 2018 M2 57673 100
16 2018 M3 57673 NaN
17 2018 M4 57673 150
1-)我希望在此数据框中只有一个月内至少具有价值的产品。
所以我的想法是将所有相似的产品代码分组,并检查是否至少有一个值!= NaN
。
为了分组,我正在使用此功能:
df = df_demand.groupby(['Materiais'], sort=False, as_index=False)
2-)使用类似的方法过滤至少有一个值!= NaN'
的月份:
df = df_demanda.groupby(['Month'], sort=False, as_index=False)
答案 0 :(得分:1)
首先,您想要获得一个汇总,该汇总指示给定的产品是否具有非null值(nan的值不是“ true”):
materiais_any_non_null = df.groupby('Materiais')['Values'].transform('any')
然后用这个来掩盖您的df
:
df[materiais_any_non_null]
结果:
Year Month Materiais Values
7 2018 M1 58859 NaN
8 2018 M2 58859 NaN
9 2018 M3 58859 NaN
10 2018 M4 58859 NaN
11 2018 M5 58859 300.0
12 2018 M6 58859 NaN
13 2018 M7 58859 NaN
14 2018 M1 57673 NaN
15 2018 M2 57673 100.0
16 2018 M3 57673 NaN
17 2018 M4 57673 150.0
答案 1 :(得分:0)
newdf = df.dropna(subset = ['Values'])
答案 2 :(得分:0)
首先创建具有销售的唯一Materiais
的列表。
然后只是布尔值索引
sale_months = df[df['Values'].notna()].Materiais.unique()
df[df.Materiais.isin(sale_months)]