比方说,我有一个数据框:
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()
使用列表理解。
如果您在 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']]})