热线电话:13121318867

登录
2019-03-07 阅读量: 810
Pandas - 使用算术向数据框添加新行

假设我有一个像这样的数据框(df),有大量的行和列......

v w x y ... z

0 a p 1 1 ... 1

1 a q 0 1 ... 0

2 b p 1 1 ... 1

3 b q 0 1 ... 0

4 c p 1 1 ... 1

5 c q 1 0 ... 1

我想在v相同的每一行中除以值,并且w等于p,其中列为v列相同的行中各列的每个值的总和,并在新行或列中返回此新值。例如:

v w x y ... z

0 a p 1 1 ... 1

1 a q 0 1 ... 0

2 a r 1 0.5 ... 0.5

3 b p 1 1 ... 1

4 b q 0 1 ... 0

5 b r 0.5 1 ... 0.5

6 c p 1 1 ... 1

7 c q 1 0 ... 1

8 c r 1 0.5 ... 1

列w中具有r的行具有这些比例。

或者,这些比例可以在新列中。我假设的一些值是NaN或缺失,这很好。

v w x y ... z rx ry ... rz

0 a p 1 1 ... 1 1 0.5 ... 0.5

1 a q 0 1 ... 0 Nan Nan ... Nan

2 b p 1 1 ... 1 0.5 1 ... 0.5

3 b q 0 1 ... 0 Nan Nan ... Nan

4 c p 1 1 ... 1 1 0.5 ... 1

5 c q 1 0 ... 1 Nan Nan ... Nan

我可以通过一个简单的语句对单个列中的一组配对行执行此操作。

df.loc[df['v'] == 'a','rx'] = df.loc[df['v'] == 'a', 'x'].sum()

但我想为一个大型数据框架做这件事,因为制作单个语句需要花费很多时间。我知道我可以用循环做到这一点,但我想知道有更简单的方法吗?我只是觉得这可以通过numpy或pandas函数/语句轻松完成。

解决办法:df.set_index('v',inplace=True)

df=pd.concat([df,(df.loc[df.w=='p']/df.sum(level=0)).fillna('r')]).sort_index().reset_index()

df

Out[539]:

v w x y z

0 a p 1.0 1.0 1.0

1 a q 0.0 1.0 0.0

2 a r 1.0 0.5 1.0

3 b p 1.0 1.0 1.0

4 b q 0.0 1.0 0.0

5 b r 1.0 0.5 1.0

6 c p 1.0 1.0 1.0

7 c q 1.0 0.0 1.0

8 c r 0.5 1.0 0.5

20.1382
2
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子