Skip to main content
 首页 » 编程设计

python之从 Dataframe 中选择行并包含另一列 python

2025年05月04日20yyy_WW

我是 python 的新手,如何从数据框中选择以 _old 结尾的列并将 B 列 作为最终输出?这是我的数据框:

import pandas as pd 
import numpy as np 
df1 = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(), 
                   'B': 'james weker john mark jane der liv vam'.split(), 
                   'C_old': np.arange(8), 'D_old': np.arange(8) * 2}) 
print(df1) 

我试过这个,它只选择以 _old 结尾的列,但我要在输出中包含 B 列

df1[df1.columns[pd.Series(df1.columns).str.endswith('_old')]] 

我的预期输出应该是这样的

import pandas as pd 
import numpy as np 
df1 = pd.DataFrame({ 
                   'B': 'james weker john mark jane der liv vam'.split(), 
                   'C_old': np.arange(8), 'D_old': np.arange(8) * 2}) 
print(df1) 

请您参考如下方法:

使用DataFrame.filter使用正则表达式 - $ 用于字符串的结尾,| 用于 or 和 ^B$ 用于按列选择 B (^ 是字符串的开头)

df = df1.filter(regex='_old$|^B$') 

您可以通过掩码进行选择 - 使用 DataFrame.loc按条件选择所有行 (:) 和列:

df = df1.loc[:, df1.columns.str.endswith('_old') | (df1.columns == 'B')] 

或者使用Index.union将 B 添加到列中:

df = df1[df1.columns[df1.columns.str.endswith('_old')].union(['B'])] 
print (df) 
       B  C_old  D_old 
0  james      0      0 
1  weker      1      2 
2   john      2      4 
3   mark      3      6 
4   jane      4      8 
5    der      5     10 
6    liv      6     12 
7    vam      7     14