pandas - pandas:在多列中找到字符串后获取下一列的值
问题描述
在多列中进行字符串搜索后,如何获得下一列?
我的数据有不同长度的集合,如下所示。我想在 '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, axis=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
,因为您对相邻值感兴趣:
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
推荐阅读
- angular - 角度反应形式 - 以编程方式将输入元素绑定到反应形式
- react-native - onPanResponderRelease 后,自动动画移动无法正常工作
- apache - Apache 无法启动。设置虚拟主机。MAMP
- android - 如何使用 listview 获取从 getItemAtPosition 中选择的 id
- matlab - Best approach to speed up pixel processing in matlab
- python - Is there a way of addressing all the inputs in a program?
- android - Continually Running Background Service
- bash - Fill empty fields - awk
- android - Load a single field of the object in realm
- angular - Firefox 控制台中的异常跟踪不使用源映射