在 pandas 中,如何创建按 id 编制索引的数据帧,并且每个外观都有单独的内容?



在Python 3和pandas中,我有数据帧:

comps.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 62679 entries, 0 to 62678
Data columns (total 39 columns):
cnpj                           62679 non-null object
razao_social                   62679 non-null object
nome_fantasia                  36573 non-null object
nome_socio                     62679 non-null object
cnpj_cpf_do_socio              62679 non-null object

列 (cnpj( 具有唯一的公司标识符代码。列 (nome_socio( 包含与公司相关的人员的姓名,列 (cnpj_cpf_do_socio( 包含这些人的识别代码

所以(cnpj(中的代码可以重复很多行,根据人数相关。例如:

cnpj            nome_socio  cnpj_cpf_do_socio 
12345678901234  Paul JR.    987654321
12345678901234  Paul SR.    987665656
12345678901234  Mary Tree   987651213
12345678901234  Paula Sims  987652328
78889098898085  Vitor Moon  558900690
78889098898085  Sheila Kerr 546656588

其他列(razao_social(和(nome_fantasia(也是重复的,是公司的名称

因此,我想创建一个新的数据帧,该数据帧每行上只有每个代码 (cnpj(,以及相应的名称 (razao_social( 和 (nome_fantasia(。所有 (nome_socio( 和 (cnpj_cpf_do_socio( 对应的都在同一行上,但用 ";" 分隔

像这样:

cnpj            razao_social    nome_fantasia   all_names                               all_ids_names
12345678901234  Company 1       Zebra           Paul JR.;Paul SR.;Mary Tree;Paula Sims  987654321;987665656;987651213;987652328
78889098898085  Company 2       All Shops       Vitor Moon;Sheila Kerr                  558900690;546656588

拜托,有谁知道我如何创建这个新数据帧?

您可以使用groupbyagg并执行以下操作:

df1 = (df
.groupby(['cnpj','razao_social', 'nome_fantasia'])
.agg({'nome_socio': lambda x: ';'.join(list(x)),
'cnpj_cpf_do_socio': lambda x: ';'.join(list(map(str, x)))})
.reset_index()

你可以用一个pivot_table来做到这一点,就像这样:

funcs = {"razao_social": lambda x: x, "nome_fantasia": lambda x: x,
"nome_socio": lambda x: ";".join(x), "cnpj_cpf_do_socio": lambda x: ";".join(x)}
pivot = pd.pivot_table(df, index="cnpj", aggfunc=funcs)

然后创建all_names

pivot["all_names"] = pivot["nome_socio"].str.cat(pivot["cnpj_cpf_do_socio"], sep=";")

相关内容

  • 没有找到相关文章

最新更新