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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在数据框中添加两个元素(基于索引)相关的知识,希望对你有一定的参考价值。

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

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

|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] 

但它不起作用。

任何帮助,将不胜感激。

答案

对于一个非常易读的解决方案,组合np.where来选择shiftvar1包含.的行。使用-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

以上是关于在数据框中添加两个元素(基于索引)的主要内容,如果未能解决你的问题,请参考以下文章

通过数据框中的列表 len 复制行并将它们添加为索引

在数据框中,找到列的每个元素的下一个较小值的索引

在Python中查找与数据框元素列表相对应的索引列表

访问熊猫数据框中内部多索引级别的最后一个元素

获取pandas数据框中每一列的前k个元素的索引的快速方法

Pyspark 基于另一个类似的数据框添加或删除数据框中的行