一个基于列值的新列中对应列的加值

时间:2019-03-15 02:52:11

标签: python-3.x pandas pandas-groupby

我有2个两个数据帧df1和df2,在df2中我有4列。我想如果df2 column1的值为0,代码应在df1中添加相应的3列值,其列名称为col2_0,col3_0和col4_0(注意:此过程还需要对值-1,-2,-3,-4做-5),如果可以的话,可以解决这个问题,但是我正在寻找熊猫来解决此问题的简便方法

这是df2

enter image description here

1 个答案:

答案 0 :(得分:1)

在此示例中,我将使用最初为空的df1并添加一些额外的行:

In [403]: df1[['col2_0','col3_0','col4_0']] = df2[df2['#timestamp'].isin(range(-5,1))][['grid_U1','grid_U2','grid_U3']]

In [404]: df1
Out[404]: 
    col2_0   col3_0   col4_0
0  413.714  415.796  416.757
1  413.797  415.909  416.853
2  413.926  416.117  417.090
3  414.037  416.093  417.158
4  414.066  416.163  417.175
5  414.064  416.183  417.085
6      NaN      NaN      NaN
7      NaN      NaN      NaN
8      NaN      NaN      NaN
9      NaN      NaN      NaN

如果要匹配行索引(从df2中的给定行号复制到df1中的相同行号),则可以使用以下方法:

In [405]: df1[['col2_0','col3_0','col4_0']] = df2[df2['#timestamp'].isin([-3,-1])][['grid_U1','grid_U2','grid_U3']]

In [406]: df1
Out[406]: 
    col2_0   col3_0   col4_0
0      NaN      NaN      NaN
1      NaN      NaN      NaN
2  413.926  416.117  417.090
3      NaN      NaN      NaN
4  414.066  416.163  417.175
5      NaN      NaN      NaN
6      NaN      NaN      NaN
7      NaN      NaN      NaN
8      NaN      NaN      NaN
9      NaN      NaN      NaN

我将通过选择顶部不出现的时间戳值来确认这与行号匹配:

In [412]: df1[['col2_0','col3_0','col4_0']] = df2[df2['#timestamp'].isin([-3,-1])][['grid_U1','grid_U2','grid_U3']].reset_index(drop=True)

In [413]: df1
Out[413]: 
    col2_0   col3_0   col4_0
0  413.926  416.117  417.090
1  414.066  416.163  417.175
2      NaN      NaN      NaN
3      NaN      NaN      NaN
4      NaN      NaN      NaN
5      NaN      NaN      NaN
6      NaN      NaN      NaN
7      NaN      NaN      NaN
8      NaN      NaN      NaN
9      NaN      NaN      NaN

如果您想从df1的顶部进行填充,则可以在最后添加对reset_index的调用(需要drop = True以避免在其中添加额外的索引列):

function slideNumbers() {
  const arrows = document.getElementsByClassName("orbit-arrow");
  const target = document.getElementById("currentSlide");
  [...arrows].forEach(function(arrow) {
    arrow.addEventListener("click", function() {
      const currentSlide = document.querySelector(".is-active");
      target.textContent = Number(currentSlide.getAttribute("data-slide")) + 1;
    });
  });
}