首页 > 解决方案 > 熊猫从多列的行中获取新列(其中条目是列表)

问题描述

我有一本字典,我想把它变成一个数据框,然后将该数据框的一些列组合成一列。

我的字典是这样的:

mydict = {'Participants': {'source': ['1', '2', '3'],
                           'name': ['A', 'B', 'C'],
                           'Entry (1)': ['Address1', 'Address2', 'Address3'],
                           'Entry (2)': ['Number1', 'Number2', 'Number2'],
                           'Entry (3)': ['Start1', 'Start2', 'Start3']},
            'Countries': {'DK': ['1', '2', '3'],
                      'UK': ['1', '3', '2'],
                      'CDN': ['3', '2', '1'],
                      'FR': ['1', '2', '3']}}

结果数据框如下所示: df = pd.DataFrame(mydict)

东风:

           Countries                    Participants
CDN        [3, 2, 1]                             NaN
DK         [1, 2, 3]                             NaN
Entry (1)        NaN  [Address1, Address2, Address3]
Entry (2)        NaN     [Number1, Number2, Number2]
Entry (3)        NaN        [Start1, Start2, Start3]
FR         [1, 2, 3]                             NaN
UK         [1, 3, 2]                             NaN
name             NaN                       [A, B, C]
source           NaN                       [1, 2, 3]

我有多个“条目(n)”列,其中包含每个参与者(df['Participants']['name'])的“地址、编号和开始”信息。我现在需要的是一个附加列“条目”,它为每一行组合了Entry (1)Entry (2)的信息Entry(3)。由于条目的数量(Entry (n)因数据源而异,因此我需要获取如下条目的数量:

entries = re.findall(r'Entry \(\d\)', str(mydict['Participants'].keys()))

这给我留下了所有条目的列表:['Entry (1)', 'Entry (2)', 'Entry (3)'].

我最后想要的是这样的数据框:

           Countries                    Participants
CDN        [3, 2, 1]                             NaN
DK         [1, 2, 3]                             NaN
Entry (1)        NaN  [Address1, Address2, Address3]
Entry (2)        NaN  [Number1, Number2, Number2]
Entry (3)        NaN  [Start1, Start2, Start3]
Entries          Nan  ['Address1\nNumber1\Start1', 'Address2\nNumber2\Start2', 'Address3\nNumber3\nStart3']  <<-- I need this
FR         [1, 2, 3]                             NaN
UK         [1, 3, 2]                             NaN
name             NaN                       [A, B, C]
source           NaN                       [1, 2, 3]

谁能告诉我如何实现这一目标的熊猫特定方法?

标签: pythonpandasdataframe

解决方案


看来你需要

s=pd.DataFrame(df.filter(like='Entry',axis=0).Participants.tolist()).apply('/n'.join).tolist()
df.loc['Entries','Participants']=s
df
Out[64]: 
                                                Participants  Countries
CDN                                                      NaN  [3, 2, 1]
DK                                                       NaN  [1, 2, 3]
Entry (1)                     [Address1, Address2, Address3]        NaN
Entry (2)                        [Number1, Number2, Number2]        NaN
Entry (3)                           [Start1, Start2, Start3]        NaN
FR                                                       NaN  [1, 2, 3]
UK                                                       NaN  [1, 3, 2]
name                                               [A, B, C]        NaN
source                                             [1, 2, 3]        NaN
Entries    [Address1/nNumber1/nStart1, Address2/nNumber2/...        NaN

请注意,您可以sort_index在末尾添加


推荐阅读