You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何匹配共同值生成新DataFrame:跨年份州-行业匹配需求

解决思路和实现代码

这个需求核心是找到每个州在两年间重叠的行业,还要处理多行业拆分显示的情况,我给你一步步实现:

1. 整理所有涉及的州(保持和示例一致的顺序)

首先我们需要把两年里出现的所有州都列出来,而且要和你给出的示例顺序匹配——先放2019年出现过的州,再放2020年新增的州:

# 获取2019年的唯一州列表
states_2019_unique = data_2019['state'].unique()
# 获取2020年里没在2019出现过的州
states_2020_new = data_2020[~data_2020['state'].isin(states_2019_unique)]['state'].unique()
# 合并成最终的州列表
all_states = list(states_2019_unique) + list(states_2020_new)

2. 提取每个州两年的行业集合

我们把两年的数据按州分组,把每个州的行业转换成集合,这样方便后续求交集:

# 2019年每个州的行业集合
state_inds_2019 = data_2019.groupby('state')['industry'].apply(set).to_dict()
# 2020年每个州的行业集合
state_inds_2020 = data_2020.groupby('state')['industry'].apply(set).to_dict()

3. 构造目标数据的列表

接下来遍历每个州,计算共同行业,然后生成符合要求的行数据——如果有多个共同行业,每个行业单独占一行,且共同行业数量都填总个数:

data_both_rows = []
for state in all_states:
    # 取出该州两年的行业集合,没有的话用空集合
    inds_2019 = state_inds_2019.get(state, set())
    inds_2020 = state_inds_2020.get(state, set())
    # 求交集得到共同行业
    common_inds = inds_2019 & inds_2020
    count = len(common_inds)
    
    if common_inds:
        # 有共同行业,每个行业生成一行
        for ind in common_inds:
            data_both_rows.append({
                'state': state,
                'common_industry': ind,
                'common_industry_count': count
            })
    else:
        # 没有共同行业,生成一行空值+0
        data_both_rows.append({
            'state': state,
            'common_industry': '',
            'common_industry_count': 0
        })

4. 转换成目标DataFrame

最后把列表转成DataFrame就搞定了:

data_both = pd.DataFrame(data_both_rows)

运行这段代码后,生成的data_both就和你给出的示例完全一致啦。

内容的提问来源于stack exchange,提问作者NonSleeper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:22:27