繁体   English   中英

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

[英]Shift rows in pandas df where equal to specific value

我不确定哪个是解决这个问题最有效的过程,所以我会很广泛。 我想shift ,并结合一row ,其中==为特定值。 对于df下面我想shift rows ,其中值高达==X 但是我想将它与上面的字符串结合起来,而不是覆盖它。

注意:我要向上shiftrow14th row 因此,选择第n row并向上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

预期输出:

    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

您可以尝试如下操作:

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
​

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM