Skip to main content
 首页 » 编程设计

python之根据其他列的值创建新列

2025年05月04日13langtianya

我有一个看起来像这样的 DataFrame:

import numpy as np 
import pandas as pd 
 
df=pd.DataFrame([['vt 40462',5,6],[5,6,6],[5,5,8],[4,3,1],['vl 6450',5,6],[5,6,7], 
             [1,2,3],['vt 40462',5,6],[5,5,8],['vl 658',6,7],[5,5,8],[4,3,1],['vt 40461',5,6],[5,5,8], 
             [7,8,5]],columns=['A','B','C']) 

df

         A  B  C 
0 vt 40462  5  6 
1        5  6  6 
2        5  5  8 
3        4  3  1 
4  vl 6450  5  6 
5        5  6  7 
6        1  2  3 
7  vt 40462  5  6 
8        5  5  8 
9   vl 658  6  7 
10       5  5  8 
11       4  3  1 
12 vt 40461 5  6 
13        5 5  8 
14        7 8  5 

我想在 A 列中为索引提供 vt 和 vl 之间的值,并创建一个新列:

         A  B  C  D 
0 vt 40462  5  6  vt 40462 
1        5  6  6  vt 40462 
2        5  5  8  vt 40462 
3        4  3  1  vt 40462 
4  vl 6450  5  6  vl 6450 
5        5  6  7  vl 6450 
6        1  2  3  vl 6450 
7 vt 40462  5  6  vt 40462 
8        5  5  8  vt 40462 
9   vl 658  6  7  vl 658 
10       5  5  8  vl 658 
11       4  3  1  vl 658 
12 vt 40461 5  6  vt 40461 
13        5 5  8  vt 40461 
14        7 8  5  vt 40461 

请您参考如下方法:

另一种方法是将 assign 列 D 设为 A 的所有以字母开头的值,然后使用 df.ffill() 去除 NaN:

df.assign(D=df.loc[df.A.str.contains('^[A-Za-z]', na=False), 'A']).ffill() 
 
 
           A  B  C         D 
0   vt 40462  5  6  vt 40462 
1          5  6  6  vt 40462 
2          5  5  8  vt 40462 
3          4  3  1  vt 40462 
4    vl 6450  5  6   vl 6450 
5          5  6  7   vl 6450 
6          1  2  3   vl 6450 
7   vt 40462  5  6  vt 40462 
8          5  5  8  vt 40462 
9     vl 658  6  7    vl 658 
10         5  5  8    vl 658 
11         4  3  1    vl 658 
12  vt 40461  5  6  vt 40461 
13         5  5  8  vt 40461 
14         7  8  5  vt 40461 

或者,或多或少等同,但分两步:

df.loc[df.A.astype(str).str.contains('^[A-Za-z]'), 'D'] = df.A 
 
df.ffill()