Python 将列表/数据帧中特定行的索引处的字符串替换为同一索引处的行中的字符串

Python 将列表/数据帧中特定行的索引处的字符串替换为同一索引处的行中的字符串,python,list,loops,replace,iterator,Python,List,Loops,Replace,Iterator,我有一个像这样的2d阵列: list_of_data = [['Joe', 4, 'MSP', 4, 5, 'cabbage', None], ['Joe', 43, '2TM', 41, 53, 'cabbage', None], ['Joe', 24, 'MSP', 44, 55, 'cabbage', None], ['Joe', 54, 'MIA', 42, 85, 'cabbage', None], ['Tom', 7, '2TM', 4,

我有一个像这样的2d阵列:

list_of_data = 
    [['Joe', 4, 'MSP', 4, 5, 'cabbage', None], 
    ['Joe', 43, '2TM', 41, 53, 'cabbage', None],
    ['Joe', 24, 'MSP', 44, 55, 'cabbage', None],
    ['Joe', 54, 'MIA', 42, 85, 'cabbage', None],

    ['Tom', 7, '2TM', 4, 52, 'cabbage', None],
    ['Tom', 4, 'LAX', 43, 52, 'cabbage', None],
    ['Tom', 4, 'MCO', 4, 5, 'cabbage', None],

    ['Fred', 4, '2TM', 4, 5, 6, 'cabbage'],
    ['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'],
    ['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]
这个问题是关于在第二个索引处包含值“2TM”的行/索引。例如:

Joe在其数据的第二次显示中,索引2处的值为“2TM”。 Tom的数据第一次出现时,索引2处的值为“2TM”。 Fred的数据第一次出现时,索引2处的值为“2TM”

每次数据中出现值“2TM”时,我都想用下两行中相同索引处的值替换“2TM”,并用连字符分隔。上述示例将变为以下示例:

list_of_data = 
    [['Joe', 4, 'MSP', 4, 5, 'cabbage', None], 
    ['Joe', 43, 'MSP-MIA', 41, 53, 'cabbage', None],
    ['Joe', 24, 'MSP', 44, 55, 'cabbage', None],
    ['Joe', 54, 'MIA', 42, 85, 'cabbage', None],

    ['Tom', 7, 'LAX-MCO', 4, 52, 'cabbage', None],
    ['Tom', 4, 'LAX', 43, 52, 'cabbage', None],
    ['Tom', 4, 'MCO', 4, 5, 'cabbage', None],

    ['Fred', 4, 'LAG-ITH', 4, 5, 6, 'cabbage'],
    ['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'],
    ['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]
我试过用这个替代品。方法获取可能接近正确代码的内容:

x=0
for row in list_of_data:
    if '2TM' in row:
        list_of_data.replace(list_of_data[2], list_of_data[x+1 + x+2])
    x+=1
这将产生错误消息:

AttributeError: 'list' object has no attribute 'replace'
我认为这样做可以:

list_of_data = [['Joe', 4, 'MSP', 4, 5, 'cabbage', None],
                ['Joe', 43, '2TM', 41, 53, 'cabbage', None],
                ['Joe', 24, 'MSP', 44, 55, 'cabbage', None],
                ['Joe', 54, 'MIA', 42, 85, 'cabbage', None],

                ['Tom', 7, '2TM', 4, 52, 'cabbage', None],
                ['Tom', 4, 'LAX', 43, 52, 'cabbage', None],
                ['Tom', 4, 'MCO', 4, 5, 'cabbage', None],

                ['Fred', 4, '2TM', 4, 5, 6, 'cabbage'],
                ['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'],
                ['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]

for i in range(len(list_of_data)):
    if list_of_data[i][2] == '2TM':
        list_of_data[i][2] = list_of_data[i+1][2] + '-' + list_of_data[i+2][2]

print(list_of_data)
输出:

[['Joe', 4, 'MSP', 4, 5, 'cabbage', None], ['Joe', 43, 'MSP-MIA', 41, 53, 'cabbage', None], ['Joe', 24, 'MSP', 44, 55, 'cabbage', None], ['Joe', 54, 'MIA', 42, 85, 'cabbage', None], ['Tom', 7, 'LAX-MCO', 4, 52, 'cabbage', None], ['Tom', 4, 'LAX', 43, 52, 'cabbage', None], ['Tom', 4, 'MCO', 4, 5, 'cabbage', None], ['Fred', 4, 'LAG-ITH', 4, 5, 6, 'cabbage'], ['Fred', 4, 'LAG', 4, 5, 6, 'cabbage'], ['Fred', 4, 'ITH', 4, 5, 6, 'cabbage']]

列表没有替换功能
试试这个:

for row in list_of_data:
  if '2tm' in row:
    id = list_of_data.index('2tm')
    next_i = id + 1;
    next_again = id + 2;
    list_of_data[id] = list_of_data[next_i] + '-' + list_of_data[next_again]

你提到数据帧。那么,您可以使用pandas解决方案了吗?我认为最后一个代码段没有正确缩进。@cᴏʟᴅsᴘᴇᴇᴅ 事实上,是的,我也非常愿意接受熊猫的解决方案。@SamChats抱歉,我已经解决了这个问题。该片段最初是缩进的,如图所示,但在我将其粘贴到此处以供提问时,它发生了移动。