首页 > 解决方案 > 在具有相同单词模式的数据框中交换 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'])

谢谢你

标签: pythonpandas

解决方案


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

推荐阅读