在与特定值相等的位置移动行

2024-06-24 12:45:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道哪一个是最有效的过程来实现这个问题,所以我会非常广泛。我想shift并将row其中的==组合成一个特定的值。对于下面的df,我想shiftrows,其中值是==X。但我想把它和上面的字符串结合起来,而不是覆盖它

注意:我想row向上的shift是每14throw一次。所以选择第n个rowshift以上可能更容易

df = pd.DataFrame({
    'Value' : ['Foo','X','00:00','00:00','29:00','30:00','00:00','02:00','15:00','20:00','10:00','15:00','20:00','25:00'],                 
    'Number' : [00,0,1,2,3,4,5,6,7,8,9,10,11,12],                      
    })

val = ['X']

a = df[df.isin(val)].shift(-1)

df[df.isin(val)] = np.nan

out_df = a.combine_first(df)

输出:

    Value  Number
0       X     0.0
1     NaN     0.0
2   00:00     1.0
3   00:00     2.0
4   29:00     3.0
5   30:00     4.0
6   00:00     5.0
7   02:00     6.0
8   15:00     7.0
9   20:00     8.0
10  10:00     9.0
11  15:00    10.0
12  20:00    11.0
13  25:00    12.0

预期输出:

    Value  Number
0   Foo X     0.0
2   00:00     1.0
3   00:00     2.0
4   29:00     3.0
5   30:00     4.0
6   00:00     5.0
7   02:00     6.0
8   15:00     7.0
9   20:00     8.0
10  10:00     9.0
11  15:00    10.0
12  20:00    11.0
13  25:00    12.0

Tags: 字符串numberdataframedfshiftfoovalue过程
1条回答
网友
1楼 · 发布于 2024-06-24 12:45:52

您可以尝试以下方法:

df.groupby((df['Value'] != val[0]).cumsum())[['Value','Number']].agg({'Value':' '.join, 'Number':'sum'})

输出:

       Value  Number
Value               
1      Foo X       0
2      00:00       1
3      00:00       2
4      29:00       3
5      30:00       4
6      00:00       5
7      02:00       6
8      15:00       7
9      20:00       8
10     10:00       9
11     15:00      10
12     20:00      11
13     25:00      12
​

相关问题 更多 >