从数据框中选择行,并包括另一列python

Liv*_*neM 1 python numpy dataframe pandas

我是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)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过只选择以_old 结尾的列,但是我要在输出中包含B列的内容

df1[df1.columns[pd.Series(df1.columns).str.endswith('_old')]]
Run Code Online (Sandbox Code Playgroud)

我的预期输出应如下所示

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)
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

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

df = df1.filter(regex='_old$|^B$')
Run Code Online (Sandbox Code Playgroud)

您可以按遮罩DataFrame.loc进行选择- 用于:按条件选择所有行()和列:

df = df1.loc[:, df1.columns.str.endswith('_old') | (df1.columns == 'B')]
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)