Python中如何基于条件(如指定日期)创建目标结构的透视表?
问题描述
现有两个Pandas DataFrame:
import pandas as pd data_1 = {'Day': ['Mon','Mon', 'Mon','Tue','Tue'], 'product': ['A','B','C','D','E']} df1 = pd.DataFrame(data_1)
data_2 = {'Day': ['Mon','Mon', 'Mon','Mon','Mon', 'Mon','Mon','Mon', 'Mon', 'Mon','Tue','Tue','Wed','Wed'], 'product_1': ['A','A','A','B','B','B','C','C','C','D','D','E','A','B'], 'product_2': ['A','B','C','A','B','C','A','B','C','E','B','D','B','A'], 'price':[10,20,30,40,55,50,60,70,80,90,12,13,14,15]} df_2 = pd.DataFrame(data_2)
需要基于指定条件(例如筛选Day为周一的数据)生成如下结构的透视表:
A B C A 10 20 30 B 40 55 50 C 60 70 80
解决方案
可以通过以下步骤实现需求:
获取指定日期对应的有效产品列表
从df1中提取目标日期下的product值,作为透视表行和列的有效范围:target_day = 'Mon' valid_products = df1[df1['Day'] == target_day]['product'].tolist()过滤
df_2中的数据
筛选出df_2中符合目标日期,且product_1和product_2都在有效产品列表内的行:filtered_df = df_2[(df_2['Day'] == target_day) & (df_2['product_1'].isin(valid_products)) & (df_2['product_2'].isin(valid_products))]生成透视表并调整结构
使用pivot方法生成透视表,再通过reindex确保行和列的顺序与df1中目标日期的产品顺序一致:pivot_table = filtered_df.pivot(index='product_1', columns='product_2', values='price') # 调整行和列的顺序,匹配有效产品列表 pivot_table = pivot_table.reindex(valid_products).reindex(columns=valid_products)
执行上述代码后,pivot_table就是目标结构的透视表。如果需要处理其他日期,只需修改target_day的值即可。
内容的提问来源于stack exchange,提问作者Nikita Menon
相关产品推荐
相关产品推荐

