python - 在具有相同单词模式的数据框中交换 2 行
问题描述
在这个数据中
df = pd.DataFrame({'Info': ['Station 1','Measure A', 'Observation alpha','NA','NA','NA','Station 2','Measure B', 'Observation bravo','NA','NA','NA','Station 3','Measure B', 'Observation charlie','NA','NA','NA'],'Values': ['NA','NA','NA',1,4,5,'NA','NA','NA',1,9,4,'NA','NA','NA',6,4,8,]}, columns = ['Info', 'Values'])
我希望通过使用包含这两个单词“Measure”和“Station”的行关闭Measure和station来交换具有相同关键字模式的行,以将它们交换成这样:
df = pd.DataFrame({'Info': ['Measure A','Station 1', 'Observation alpha','NA','NA','NA','Measure B','Station 2', 'Observation bravo','NA','NA','NA','Measure B','Station 3', 'Observation charlie','NA','NA','NA'],'Values': ['NA','NA','NA',1,4,5,'NA','NA','NA',1,9,4,'NA','NA','NA',6,4,8,]}, columns = ['Info', 'Values'])
谢谢你
解决方案
IIUC,您可以尝试创建 2 个布尔掩码并修改索引 (-1 &+1),然后将它们与其他行连接起来:
c1 = df['Info'].str.contains("Station")
c2 = df['Info'].str.contains("Measure")
d1 = df[c1]
d2 = df[c2]
d1.index = d1.index+1
d2.index = d2.index-1
out = pd.concat((d1,d2,df[~(c1|c2)])).sort_index()
print(out)
Info Values
0 Measure A NA
1 Station 1 NA
2 Observation alpha NA
3 NA 1
4 NA 4
5 NA 5
6 Measure B NA
7 Station 2 NA
8 Observation bravo NA
9 NA 1
10 NA 9
11 NA 4
12 Measure B NA
13 Station 3 NA
14 Observation charlie NA
15 NA 6
16 NA 4
17 NA 8
推荐阅读
- python - 未找到变量名
- python - 根据另一个数据帧中的日期计算一个数据帧的数量总和(Python)
- python-3.x - 如何安装第三方模块(Mu)?
- swift - 无法在 swift 中使用 userdefaults 登录所有注册用户
- node.js - SyntaxError:在 Node.js express 网络服务器上安装 socket.io 后出现意外标识符
- mysql-python - 如何在 Mac OS X 上安装 MySQLdb?
- javascript - WooCommerce - 更改变体时更新 url
- reactjs - 在循环中调用 useMutation,如 react-query 中的 useQueries
- r - 如何对 R 中的每一行的一组变体进行变异?
- javascript - 检测到 Vue 重复键