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
命令。为什么不使用pandasdf.where
而不是numpy?使用numpynp.where
比pandasdf.where
有什么优势吗?