我有以下两个数据库:

url='https://raw.githubusercontent.com/108michael/ms_thesis/master/rgdp_catcode.merge'

df=pd.read_csv(url, index_col=0)
df.head(1)

    naics   catcode                                        GeoName  Description     ComponentName   year    GDP     state
0   22  E1600',\t'E1620',\t'A4000',\t'E5000',\t'E3000'...   Alabama     Utilities   Real GDP by state   2004    5205    AL

url='https://raw.githubusercontent.com/108michael/ms_thesis/master/mpl.Bspons.merge'
df1=pd.read_csv(url, index_col=0)

df1.head(1)
    state   year    unemployment    log_diff_unemployment   id.thomas   party   type    date    bills   id.fec  years_exp   session     name    disposition     catcode
0   AK  2006    6.6     -0.044452   1440    Republican  sen     2006-05-01  s2686-109   S2AK00010   39  109     National Cable & Telecommunications Association     support     C4500


关于df,我必须手动输入catcode值。我认为这就是关闭格式的原因。我想要的是简单地使用没有\t前缀的值。我想合并catcode, state, year上的dfs。我之前进行了测试,其中每个单元格只有一个值的df1.catcode与每个单元格具有多个值的另一个df.catcode中的值匹配,并且可以正常工作。

因此,从技术上讲,我要做的就是在\t中的每个连续值之前丢失df.catcode,但是此外,如果有人以前曾经进行过此类合并,那么任何通过经验学习的“技巧”都会受到赞赏。我的合并代码如下所示:

mplmerge=pd.merge(df1,df, on=(['catcode', 'state', 'year']), how='left' )


我认为这可以通过regex方法完成,我现在正在看文档。

最佳答案

清洁catcode中的df列非常简单:

catcode_fixed = df.catcode.str.findall('[A-Z][0-9]{4}')


这将产生一个系列,每行都有一个猫码列表:

catcode_fixed.head(3)
Out[195]:
0    [E1600, E1620, A4000, E5000, E3000, E1000]
1           [X3000, X3200, L1400, H6000, X5000]
2           [X3000, X3200, L1400, H6000, X5000]
Name: catcode, dtype: object


如果我正确理解您想要的内容,则需要对这些列表进行“取消组合”。简而言之,Here是诀窍:

catcode_fixed = catcode_fixed = catcode_fixed.apply(pd.Series).stack()
catcode_fixed.index = catcode_fixed.index.droplevel(-1)


因此,我们得到了(请注意索引值):

catcode_fixed.head(12)
Out[206]:
0    E1600
0    E1620
0    A4000
0    E5000
0    E3000
0    E1000
1    X3000
1    X3200
1    L1400
1    H6000
1    X5000
2    X3000
dtype: object


现在,删除旧的catcode并加入新的df1.reset_index()

df.drop('catcode',axis = 1, inplace = True)
catcode_fixed.name = 'catcode'
df = df.join(catcode_fixed)


顺便说一句,合并数据帧时可能还需要使用。

08-03 22:00