示例数据框
import pandas as pd
price_df= pd.DataFrame({
'itemId': ["A", "A", "A", "B", "B","B"," C"," C"," C"],
'date':["date1","date2","date3","date4","date5","date6","date7","date8","date9"],
'discountePrice': [1, 1, 1, 2, 3, 1, 4,5,5]
})
display(price_df)
list_df =price_df.groupby("itemId")["discountePrice"].apply(set).apply(list).reset_index()
display(list_df)
list_df.columns = ['itemId', 'list_']
def price_mark(row):
list_ = row['list_']
min_val=min(list_)
max_val=max(list_)
if len(list_)==1:
price_=max_val
status="1"
else:
price_=0
status="0"
row["price_"]=price_
row["status"]=status
return row
list_df = list_df.apply(price_mark, axis=1)
display(list_df)
解释:
- 创建示例数据框:初始化包含
itemId和discountePrice列的数据框。 - 按
itemId分组并将discountePrice转换为列表:使用groupby和apply(list)将discountePrice按itemId分组并转换为列表。 - 定义
price_mark函数:计算每个itemId的最小值和最大值,并根据列表的长度设置price_和status。 - 应用
price_mark函数:使用apply将price_mark函数应用到list_df的每一行。 - 合并结果:将
price_和status列合并回原始数据框。
运行结果:
python
复制代码
itemId discountePrice list_ price_ status
0 A 1 [1, 1, 1] 0 0
1 A 1 [1, 1, 1] 0 0
2 A 1 [1, 1, 1] 0 0
3 B 2 [2, 3, 1] 0 0
4 B 3 [2, 3, 1] 0 0
5 B 1 [2, 3, 1] 0 0
6 C 4 [4, 5, 5] 0 0
7 C 5 [4, 5, 5] 0 0
8 C 5 [4, 5, 5] 0 0
通过这种方式,你可以在 list_df 中存储计算结果,并将其合并回原始数据框。