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

Pandas 在数据帧中添加两个元素(基于索引),pandas,dataframe,indexing,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

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

在数据框中,有一些行中唯一有用的信息是关于变量的,所以我想保留这些信息。 更准确地说,我的数据框看起来像

| 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']='.'.]索引
对于测试中的num:
df['var2][num-1]=df['var2][num-1]+df['var2][num]
但它不起作用


任何帮助都将不胜感激。

要获得非常可读的解决方案,请结合选择
var1
的ed行包含
的行。使用
-1
选择下一行。如果是这种情况,请添加下一行,否则只需填充原始行。之后,只需删除带有

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

从来没有两个连续的
s是真的吗?不,从来没有两个连续的“.”这解决了我的问题,而且确实非常可读。多谢各位!Pandas还支持类似于numpy的
df.where
命令。为什么不使用pandas
df.where
而不是numpy?使用numpy
np.where
比pandas
df.where
有什么优势吗?