将pandas df中的行移到等于特定值的位置

时间:2019-09-10 01:46:15

标签: python pandas shift

我不确定哪个方法最有效地解决了这个问题,所以我会很广泛。我想shift并将row的{​​{1}}组合成一个特定值。对于下面的==,我想向上df shift,其中值是rows==。但是我想将它与上面的字符串结合起来,而不是覆盖它。

注意:我想X row shift中的每个14th。因此,更容易每隔rowrow进行一次选择?

shift

出局:

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

1 个答案:

答案 0 :(得分:2)

您可以尝试以下操作:

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
​