import pandas as pd
import numpy as np
dict = {
'店名': ['1店', '2店', '1店', '3店', '1店', '2店', '3店', '3店', '2店', '2店', '1店', '3店'],
'姓名': ['张三', '李四', '王五', '赵六', '张三', '李四', '赵六', '乔七', '李四', '李四', '王五', '乔七'],
'销售额': [200, 150, 200, 300, 200, 300, 500, 100, 90, 500, 400, 200],
}
达到下面这个表格的效果
店名 | 姓名 | 销售额大于200的数量 | 销售额大于300的数量 |
---|---|---|---|
1店 | 张三 | - | - |
- | 王五 | - | - |
2店 | 李四 | - | - |
3店 | 赵六 | - | - |
- | 乔七 | - | - |
import pandas as pd
import numpy as np
dict = {
'店名': ['1店', '2店', '1店', '3店', '1店', '2店', '3店', '3店', '2店', '2店', '1店', '3店'],
'姓名': ['张三', '李四', '王五', '赵六', '张三', '李四', '赵六', '乔七', '李四', '李四', '王五', '乔七'],
'销售额': [200, 150, 200, 300, 200, 300, 500, 100, 90, 500, 400, 200],
}
df1 = pd.DataFrame(dict)
# print(df1)
df1['销售额大于200的数量'] = df1['销售额'].apply(lambda x : 1 if x>200 else 0)
df1['销售额大于300的数量'] = df1['销售额'].apply(lambda x : 1 if x>300 else 0)
# print(df1)
df2 = df1[['店名','姓名','销售额大于200的数量','销售额大于300的数量']]
df3 = df2.groupby(['店名','姓名']).sum()
print(df3)
上一位答主的代码运行结果如下:
如果想要['店名', '姓名', '销售额大于200的数量', '销售额大于300的数量']在同一行,可以如下设置
df3 = df2.groupby(['店名', '姓名'], as_index=False).sum()
print(df3)
print(df3.columns)
运行结果如下:
如果加上两列值的判断,比如下面这个例子,我要统计商品名为“泳裤”的销售额大于200的数量,如何操作?
dict = {
'店名': ['1店', '2店', '1店', '3店', '1店', '2店', '3店', '3店', '2店', '2店', '1店', '3店'],
'姓名': ['张三', '李四', '王五', '赵六', '张三', '李四', '赵六', '乔七', '李四', '李四', '王五', '乔七'],
'销售额': [200, 150, 200, 300, np.nan, 300, 500, 100, 90, np.nan, 400, 200],
'商品名':['泳裤','泳镜','泳帽','泳裤','泳镜','泳帽','泳裤','泳镜','泳帽','泳裤','泳镜','泳帽']
}