将Pandas DataFrame中的列表复制到n个

2024-09-29 18:44:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Pandas(associateid)中有一个数据帧,它有一个针对索引的代码列表。它是这样的:

IndexBudgetCode   AssociateID
Nexusapp_341800   ppc_fli_1111
Nexusweb_120000   ooc_htl_1010
Primweb_1900000   ppc_fli_9999,ppc_fli_1777

您可以看到,在某些情况下,行中有多个associateID—总是用逗号分隔,没有空格

从这行代码中,我可以将它们放入一个列表中:

b = pd.DataFrame(budgetdf.AssociateID.str.split(',').tolist(), index=budgetdf.BudgetCode).stack()

看起来是这样的:

AssociateID                    IndexBudgetCode   
[ppc_fli_9999, ppc_fli_1777]   Primweb_1900000   

但我似乎无法复制列表来创建最终的数据帧:

IndexBudgetCode   AssociateID
Nexusapp_341800   ppc_fli_1111
Nexusweb_120000   ooc_htl_1010
Primweb_1900000   ppc_fli_9999
Primweb_1900000   ppc_fli_1777

有人能告诉我用什么方法来达到这个目的吗

谢谢


Tags: 数据代码pandas列表ppcoochtlfli
1条回答
网友
1楼 · 发布于 2024-09-29 18:44:58

也许将AssociateId扩展到单独的行中最简单的方法是 使用生成器表达式生成行:

((index, item) 
 for index, row in df['AssociateID'].str.split(',').iteritems() 
 for item in row)

然后可以将生成器表达式传递给pd.DataFrame,以获得所需的数据帧


import numpy as np
import pandas as pd

df = pd.DataFrame({
    'IndexBudgetCode':['Nexusapp_341800', 'Nexusweb_120000', 'Primweb_1900000'],
    'AssociateID':['ppc_fli_1111', 'ooc_htl_1010', 'ppc_fli_9999,ppc_fli_1777']})
df = df.set_index(['IndexBudgetCode'])

result = pd.DataFrame(((index, item) 
                       for index, row in df['AssociateID'].str.split(',').iteritems() 
                       for item in row),
                      columns=['IndexBudgetCode', 'AssociateID'])
print(result)

从而产生数据帧

   IndexBudgetCode   AssociateID
0  Nexusapp_341800  ppc_fli_1111
1  Nexusweb_120000  ooc_htl_1010
2  Primweb_1900000  ppc_fli_9999
3  Primweb_1900000  ppc_fli_1777

另一种不使用生成器表达式的方法是

result = df.groupby(level=0)['AssociateID'].apply(
    lambda grp: pd.Series(1, index=grp.str.split(',').tolist()))
result.index.names = ['IndexBudgetCode', 'AssociateID']
result = result.reset_index(['AssociateID'])
result = result[['AssociateID']]

这就产生了这个系列

                  AssociateID
IndexBudgetCode              
Nexusapp_341800  ppc_fli_1111
Nexusweb_120000  ooc_htl_1010
Primweb_1900000  ppc_fli_9999
Primweb_1900000  ppc_fli_1777

相关问题 更多 >

    热门问题