Pandas Dataframe:如何从 A 列中获取值以加入 B 列中列表的每个值?

问题描述 投票:0回答:1

比方说,我有一个数据框:

ColumnA,  Column B
prefix_1    [A, B]
prefix_2    [C, D]

我希望得到一个新的 DataFrame,例如:

ColumnA     Column B        Column C
prefix_1    [A, B]   [prefix_1-A, prefix_1-B]
prefix_2    [C, D]   [prefix_2-C, prefix_2-D]

我需要如何进行此转帐?谢谢。

我在下面试过但没用:

df['ColumnC'] = df['ColumnB'].str.split(',').apply(lambda x: [df['ColumnA'] + '-' + e.strip() for e in x]).tolist()
python pandas dataframe
1个回答
0
投票

使用列表理解。

如果您在 B 列中有列表:

df['Column C'] = [[f'{p}-{x}' for x in l] for p, l in
                   zip(df['ColumnA'], df['Column B'])]

如果 B 列中有字符串:

df['Column C'] = [[f'{p}-{x}' for x in l] for p, l in
                   zip(df['ColumnA'],
                       df['Column B'].str[1:-1].str.split(',\s*')
                       )]

如果你想要一个字符串作为输出:

df['Column C'] = ['['+', '.join([f'{p}-{x}' for x in l])+']'
                  for p, l in
                   zip(df['ColumnA'],
                       df['Column B'].str[1:-1].str.split(',\s*')
                       )]

输出:

    ColumnA Column B                  Column C
0  prefix_1   [A, B]  [prefix_1-A, prefix_1-B]
1  prefix_2   [C, D]  [prefix_2-C, prefix_2-D]

可重现的输入:

# as string
df = pd.DataFrame({'ColumnA': ['prefix_1', 'prefix_2'],
                   'Column B': ['[A, B]', '[C, D]']})

# as lists
df = pd.DataFrame({'ColumnA': ['prefix_1', 'prefix_2'],
                   'Column B': [['A', 'B'], ['C', 'D']]})
© www.soinside.com 2019 - 2024. All rights reserved.