i have a dataframe like this
F_Class Product Packages Apple Apple_A 1 Apple Apple_A 2 Apple Apple_A 1 Apple Apple_B 2 Bananas Banana_A n.a. Bananas Banana_A n.a.
I want to build the following count function to count the items in my dataframe like shown below.
- The Function should count by the Subset
['F_Class','Product'] - If
df['Packages'] == 2then increase by+2else increase by+1
The result should look like this:
F_Class Product Packages Counter Apple Apple_A 1 1 Apple Apple_A 2 3 Apple Apple_A 1 4 Apple Apple_B 2 2 Bananas Banana_A n.a. 1 Bananas Banana_A n.a. 2
Advertisement
Answer
If need sum by Packages numbers use DataFrameGroupBy.cumsum with replace missing values to 1:
df['Packages'] = pd.to_numeric(df['Packages'], errors='coerce')
df['Counter'] = (df.assign(Packages = df['Packages'].fillna(1).astype(int))
.groupby(['F_Class','Product'])['Packages'].cumsum())
print (df)
F_Class Product Packages Counter
0 Apple Apple_A 1.0 1
1 Apple Apple_A 2.0 3
2 Apple Apple_A 1.0 4
3 Apple Apple_B 2.0 2
4 Bananas Banana_A NaN 1
5 Bananas Banana_A NaN 2
Detail:
print (df.assign(Packages = df['Packages'].fillna(1).astype(int))) F_Class Product Packages 0 Apple Apple_A 1 1 Apple Apple_A 2 2 Apple Apple_A 1 3 Apple Apple_B 2 4 Bananas Banana_A 1 5 Bananas Banana_A 1