Python中列值(字符串)的向后串联

2024-04-24 21:03:55 发布

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

我试图通过递减列连接字符串,并假设表如下所示。我正在创建固定数量(5)的新列&希望每一列都有由非空字符串连接的字符串。假设对于row-1,第一个连接将是STR_1;STR_2;STR_3,第二个连接应该是STR_1;STR_2,第三个连接应该是STR_1&其余的单元格应该保持为空。你知道吗

MAJOR_BRAND | SUB_SEGMENT | PACKAGE_TYPE | PACKAGE |  SIZE   | FLAVOR  | VOLUME
-------------------------------------------------------------------------------------
STR_1       | STR_2       | STR_3        |         |         |         |
STR_1       | STR_2       | STR_3        |         |         |         | STR_7
STR_1       |             |              | STR_4   | STR_5   | STR_6   | STR_7
STR_1       |             | STR_3        |         |         | STR_6   | STR_7
STR_1       |             | STR_3        |         |         | STR_6   |    

输出应该是

 STR_JOIN_1                   | STR_JOIN_2             | STR_JOIN_3      | STR_JOIN_4 | STR_JOIN_5
----------------------------------------------------------------------------------------------------
STR_1;STR_2;STR_3             |STR_1;STR_2             |STR_1            |            |
STR_1;STR_2;STR_3;STR_7       |STR_1;STR_2;STR_3       |STR_1;STR_2      |STR_1       |       
STR_1;STR_4;STR_5;STR_6;STR_7 |STR_1;STR_4;STR_5;STR_6 |STR_1;STR_4;STR_5|STR_1;STR_4 | STR_1   
STR_1;STR_3;STR_6;STR_7       |STR_1;STR_3;STR_6       |STR_1;STR_3      |STR_1       |
STR_1;STR_3;STR_6             |STR_1;STR_3             |STR_1            |            | 

非常感谢您的帮助!!!你知道吗


Tags: 字符串packagesize数量typesegmentrowjoin
2条回答

又快又脏。注意f字符串需要python3.6+。你知道吗

res = pd.DataFrame(columns=[f'STR_JOIN_{i}' for i in range(1, 6)])

res['STR_JOIN_1'] = df.apply(lambda x: ';'.join(filter(None, x)), axis=1)

for i in range(2, 6):
    res[f'STR_JOIN_{i}'] = res[f'STR_JOIN_{i-1}'].str.split(';').str[:-1].str.join(';')

结果:

print(res)

                      STR_JOIN_1               STR_JOIN_2         STR_JOIN_3  \
0              STR_1;STR_2;STR_3              STR_1;STR_2              STR_1   
1        STR_1;STR_2;STR_3;STR_7        STR_1;STR_2;STR_3        STR_1;STR_2   
2  STR_1;STR_4;STR_5;STR_6;STR_7  STR_1;STR_4;STR_5;STR_6  STR_1;STR_4;STR_5   
3        STR_1;STR_3;STR_6;STR_7        STR_1;STR_3;STR_6        STR_1;STR_3   
4              STR_1;STR_3;STR_6              STR_1;STR_3              STR_1   

    STR_JOIN_4 STR_JOIN_5  
0                          
1        STR_1             
2  STR_1;STR_4      STR_1  
3        STR_1             
4                          

另一种方法…我想

new_data = pd.DataFrame(columns=['STR_JOIN_{}'.format(i) for i in range(1, len(initial_data.columns))])

loc = 0
for i in range(len(initial_data)):#initial_data being the input

    temp_list = [ x for x in list(initial_data.loc[i].values) if x ]

    new_data.loc[loc] = ['']*(len(initial_data.columns)-1)

    for j in range(len(temp_list)):
        new_data['STR_JOIN_{}'.format(j+1)][loc] = ';'.join(data[:len(data)-j])

    loc+=1    

相关问题 更多 >