在数据框中添加两个元素(基于索引)

时间:2019-04-08 15:17:59

标签: pandas dataframe indexing

我有一个数据帧,其中除了一个变量外,有些行无用。 我想将这些行中的变量添加到上一行,然后删除无用的行。

在数据框中有一些行,其中唯一有用的信息位于变量上,因此我想保留此信息。 更准确地说,我的数据框看起来像

|cat1| cat2|var1|var2|
|A   |x    |1   |2   |
|A   |x    |1   |0   |
|A   |x    |.   |5   |
|A   |y    |1   |2   |
|A   |y    |1   |2   |
|A   |y    |1   |3   |
|A   |y    |.   |6   |
|B   |x    |1   |2   |
|B   |x    |1   |4   |
|B   |x    |1   |2   |
|B   |x    |1   |1   |
|B   |x    |.   |3   |

我想得到

|cat1| cat2|var1|var2|
|A   |x    |1   |2     |
|A   |x    |1   |5(5+0)|
|A   |y    |1   |2     |
|A   |y    |1   |2     |
|A   |y    |1   |9(6+3)|
|B   |x    |1   |2     |
|B   |x    |1   |4     |
|B   |x    |1   |2     |
|B   |x    |1   |4(3+1)|

我尝试过类似的代码

test = df[df['var1'] == '.'].index
for num in test:
    df['var2][num - 1] = df['var2][num - 1] + df['var2][num] 

但它不起作用。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于一个易于理解的解决方案,请结合np.where来选择var1的{​​{3}}个行包含.的行。使用-1选择 next 行。如果是这种情况,请添加下一行,否则只需填充原始行。然后,只需使用.

删除所有行
df['var2_new'] = np.where(df['var1'].shift(-1) == '.', 
                          df['var2'] + df['var2'].shift(-1), df['var2'])
df[df['var1'] != '.']
#   cat1 cat2 var1  var2  var2_new
#0     A    x    1     2       2.0
#1     A    x    1     0       5.0
#3     A    y    1     2       2.0
#4     A    y    1     2       2.0
#5     A    y    1     3       9.0
#7     B    x    1     2       2.0
#8     B    x    1     4       4.0
#9     B    x    1     2       2.0
#10    B    x    1     1       4.0
相关问题