如何统计Pandas DataFrame中BPG组与其他组的匹配事件并处理分组结果
解决方法
1. 将相同symbol/date/hour的group转为列表
你之前的分组把group也纳入了分组键,导致同一组合下不同的group被拆分成了单独的组,所以无法得到目标列表。正确的做法是仅按symbol、date、hour分组,然后对group列做列表聚合:
import pandas as pd # 按指定列分组,把group列聚合为列表 grouped_df = test_df.groupby(["symbol", "date", "hour"])["group"].agg(list).reset_index()
执行后grouped_df的group列就会是你需要的格式,比如[["BPG"],["BPG"],["MPG"],["BPF", "BPG"]]这类形式。
2. 统计BPG与其他组的匹配次数
接下来筛选出包含"BPG"且存在其他组的记录,再统计次数:
统计总匹配事件数
# 筛选:group列表包含BPG,且列表长度>1(说明有其他组共存) bpg_cooccur = grouped_df[grouped_df["group"].apply(lambda x: "BPG" in x and len(x) > 1)] # 总匹配次数就是筛选后的数据行数 total_bpg_matches = len(bpg_cooccur)
统计BPG与每个组的具体匹配次数
如果需要知道BPG分别和哪些组匹配了多少次,可以进一步处理:
# 提取所有包含BPG的配对 match_pairs = [] for group_list in bpg_cooccur["group"]: # 取出列表中除BPG外的其他组 other_groups = [g for g in group_list if g != "BPG"] # 为每个其他组生成(BPG, 其他组)的配对 for g in other_groups: match_pairs.append(("BPG", g)) # 统计各配对的出现次数 pair_count = pd.Series(match_pairs).value_counts()
比如结果可能是:
(BPG, BPF) 1 (BPG, MPG) 2 dtype: int64
内容的提问来源于stack exchange,提问作者denisRei
相关产品推荐
相关产品推荐

