Python 在这种情况下,如何通过匹配公共值来生成新的数据帧?

Python 在这种情况下,如何通过匹配公共值来生成新的数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个这样的数据帧: data_2019_dict = {'state': ['Ohio', 'Texas', 'Pennsylvania', 'Nevada', 'New York', 'Nevada', 'Ohio', 'Virginia', 'Louisiana', 'Florida', 'Nevada'], 'industry': ['Agriculture', 'Agriculture', 'Agriculture', 'Agriculture', 'Medicine', 'Med

我有两个这样的数据帧:

data_2019_dict = {'state': ['Ohio', 'Texas', 'Pennsylvania', 'Nevada', 'New York', 'Nevada', 'Ohio', 'Virginia', 'Louisiana', 'Florida', 'Nevada'],
 'industry': ['Agriculture', 'Agriculture', 'Agriculture', 'Agriculture', 'Medicine', 'Medicine', 'Medicine', 'Medicine', 'Manufacture', 'Manufacture', 'Manufacture'],
 'value': [3.6, 3.2, 2.9, 2.4, 3.1, 1.5, 1.4, 0.9, 4.4, 2.0, 1.9]}

data_2020_dict = {'state': ['Kansas', 'Texas', 'California', 'Idaho', 'Nevada', 'Ohio', 'Virginia', 'Louisiana', 'Texas', 'Nevada'],
 'industry': ['Agriculture', 'Agriculture', 'Agriculture', 'Medicine', 'Medicine', 'Finance', 'Finance', 'Manufacture', 'Manufacture', 'Manufacture'],
'value': [2.3, 1.8, 1.6, 7.2, 5.9, 4.1, 0.2, 5.1, 2.3, 2.2]}

data_2019 = pd.DataFrame(data_2019_dict)
data_2020 = pd.DataFrame(data_2020_dict)

每个数据框都显示,在一年中,哪些州在这些行业表现良好。我想要创造的是,但陷入困境的是:对于每个州来说,哪一个行业在这两年都表现良好?生成的数据帧如下所示:

data_2019_dict = {'state': ['Ohio', 'Texas', 'Pennsylvania', 'Nevada', 'New York', 'Nevada', 'Ohio', 'Virginia', 'Louisiana', 'Florida', 'Nevada'],
 'industry': ['Agriculture', 'Agriculture', 'Agriculture', 'Agriculture', 'Medicine', 'Medicine', 'Medicine', 'Medicine', 'Manufacture', 'Manufacture', 'Manufacture'],
 'value': [3.6, 3.2, 2.9, 2.4, 3.1, 1.5, 1.4, 0.9, 4.4, 2.0, 1.9]}

data_2020_dict = {'state': ['Kansas', 'Texas', 'California', 'Idaho', 'Nevada', 'Ohio', 'Virginia', 'Louisiana', 'Texas', 'Nevada'],
 'industry': ['Agriculture', 'Agriculture', 'Agriculture', 'Medicine', 'Medicine', 'Finance', 'Finance', 'Manufacture', 'Manufacture', 'Manufacture'],
'value': [2.3, 1.8, 1.6, 7.2, 5.9, 4.1, 0.2, 5.1, 2.3, 2.2]}

data_2019 = pd.DataFrame(data_2019_dict)
data_2020 = pd.DataFrame(data_2020_dict)

首先,对于两列的公用行,重命名列并按和添加计数:

然后通过删除重复项和一列数据帧获取所有状态:

最后一次与
左侧合并
将缺少的值合并并替换为:


您是否定义了“表现良好”意味着什么的阈值?@DJK这些值是假设的,数据经过简化,只突出了我需要帮助的技术问题。但是,这些值确实可能令人困惑,并且它们与这个特定问题/解决方案无关。回答得很好!谢谢
df = (data_2019.merge(data_2020, on=['state','industry'])
               .rename(columns={'industry':'common_industry'}))
df['common_industry_count'] = df['state'].map(df['state'].value_counts())
df = df[['state','common_industry','common_industry_count']]
print (df)
       state common_industry  common_industry_count
0      Texas     Agriculture                      1
1     Nevada        Medicine                      2
2  Louisiana     Manufacture                      1
3     Nevada     Manufacture                      2
both = pd.concat([data_2019['state'], data_2020['state']]).drop_duplicates().to_frame()
print (both)
          state
0          Ohio
1         Texas
2  Pennsylvania
3        Nevada
4      New York
7      Virginia
8     Louisiana
9       Florida
0        Kansas
2    California
3         Idaho
df = both.merge(df, how='left')
df['common_industry_count'] = df['common_industry_count'].fillna(0).astype(int)
df['common_industry'] = df['common_industry'].fillna('')
print (df)
           state common_industry  common_industry_count
0           Ohio                                      0
1          Texas     Agriculture                      1
2   Pennsylvania                                      0
3         Nevada        Medicine                      2
4         Nevada     Manufacture                      2
5       New York                                      0
6       Virginia                                      0
7      Louisiana     Manufacture                      1
8        Florida                                      0
9         Kansas                                      0
10    California                                      0
11         Idaho                                      0