python - Pandas - 使用算术将新行添加到数据框

标签 python pandas numpy

假设我有一个像这样的数据框(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 函数/语句轻松完成。

谢谢!

最佳答案

IIUC 我将 set_index 与列 v ,然后只切片您需要的 numeratordenumeratorsum v 中所有相同值

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

关于python - Pandas - 使用算术将新行添加到数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55031922/

相关文章:

python - Pandas 数据框 : return column that is a compression of other columns

python - 混合两个数组,使相应的列彼此相邻堆叠 - Python

python - Django 表单抛出 ValueError

python - PyCharm 显示 PyQt 方法的错误参数信息

python - 将值附加到 python 中元组的列表

python - 在没有真实索引的情况下 reshape Pandas 数据框

python - pandas - 将列读取为 float ,转换无效条目

python - 为什么创建此内存 View 仅在分配给变量时才会引发 ValueError ?

python - 非均匀间距的 Numpy 或 SciPy 导数函数?

python - 使用 fastText 执行示例代码时遇到问题