Pandas 熊猫:在多个列中找到字符串后,获取下一列的值

Pandas 熊猫:在多个列中找到字符串后,获取下一列的值,pandas,dataframe,Pandas,Dataframe,在多个列中进行字符串搜索后,如何获取下一列 我的数据有如下不同长度的集合。我想在'n(index)'列中找到'AA',然后在它旁边的'v(index)'中得到值 df = pd.DataFrame(columns = ['n1', 'v1', 'n2', 'v2', 'n3', 'v3', 'n4', 'v4']) df.loc[0]=['BB', 22, 'AA', 80,'BA', 20, 'AG', 50] df.loc[1]=['AV', 90, 'AA', 2, np.nan, np.

在多个列中进行字符串搜索后,如何获取下一列

我的数据有如下不同长度的集合。我想在'n(index)'列中找到'AA',然后在它旁边的'v(index)'中得到值

df = pd.DataFrame(columns = ['n1', 'v1', 'n2', 'v2', 'n3', 'v3', 'n4', 'v4'])
df.loc[0]=['BB', 22, 'AA', 80,'BA', 20, 'AG', 50]
df.loc[1]=['AV', 90, 'AA', 2, np.nan, np.nan, np.nan, np.nan]
df.loc[2]=['AA', 10, 'DD', 9, 'PP', 12, np.nan, np.nan]
df.loc[3]=['AA', 50, 'AB',30, 'BV',30, np.nan, np.nan]
print(df)

n1  v1  n2  v2  n3  v3  n4  v4
0   BB  22  AA  80  BA  20  AG  50
1   AV  90  AA  2   NaN NaN NaN NaN
2   AA  10  DD  9   PP  12  NaN NaN
3   AA  50  AB  30  BV  30  NaN NaN
我试过了

df['AA']=(df.values='AA').shift(1,轴=1)。astype(int)

这是行不通的。我怎样才能得到下面这样的数据

    n1  v1  n2  v2  n3  v3  n4  v4  AA
0   BB  22  AA  80  BA  20  AG  50  80
1   AV  90  AA  2   NaN NaN NaN NaN 2
2   AA  10  DD  9   PP  12  NaN NaN 10
3   AA  50  AB  30  BV  30  NaN NaN 50

在数据框中搜索“AA”的位置:

location = np.argwhere(df.isin(["AA"]).to_numpy())
location
array([[0, 2],
       [1, 2],
       [2, 0],
       [3, 0]])
接下来,向
位置
数组中的列值添加1,因为您对相邻值感兴趣:

location[:, -1] = location[:, -1] + 1
location
array([[0, 3],
       [1, 3],
       [2, 1],
       [3, 1]])
获取您的价值观:

adjacent_values = [df.iat[x, y] for x, y in location]
adjacent_values
[80, 2, 10, 50]
为列指定:

df.assign(AA = adjacent_values)
    n1  v1  n2  v2  n3  v3  n4  v4  AA
0   BB  22  AA  80  BA  20  AG  50  80
1   AV  90  AA  2   NaN NaN NaN NaN 2
2   AA  10  DD  9   PP  12  NaN NaN 10
3   AA  50  AB  30  BV  30  NaN NaN 50

在数据框中搜索“AA”的位置:

location = np.argwhere(df.isin(["AA"]).to_numpy())
location
array([[0, 2],
       [1, 2],
       [2, 0],
       [3, 0]])
接下来,向
位置
数组中的列值添加1,因为您对相邻值感兴趣:

location[:, -1] = location[:, -1] + 1
location
array([[0, 3],
       [1, 3],
       [2, 1],
       [3, 1]])
获取您的价值观:

adjacent_values = [df.iat[x, y] for x, y in location]
adjacent_values
[80, 2, 10, 50]
为列指定:

df.assign(AA = adjacent_values)
    n1  v1  n2  v2  n3  v3  n4  v4  AA
0   BB  22  AA  80  BA  20  AG  50  80
1   AV  90  AA  2   NaN NaN NaN NaN 2
2   AA  10  DD  9   PP  12  NaN NaN 10
3   AA  50  AB  30  BV  30  NaN NaN 50

我遇到了一个问题,如何将不包含“AA”的行的AA设置为NaN?我遇到了一个问题,如何将不包含“AA”的行的AA设置为NaN?