熊猫:如何在Lambda公式中使用(df.groupby)

时间:2020-04-30 22:27:13

标签: python pandas lambda

以下示例:

<script type="application/javascript">
  // Object.assign polyfill
  Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(e,r){"use strict";if(null==e)throw new TypeError("Cannot convert first argument to object");for(var t=Object(e),n=1;n<arguments.length;n++){var o=arguments[n];if(null!=o)for(var a=Object.keys(Object(o)),c=0,b=a.length;c<b;c++){var i=a[c],l=Object.getOwnPropertyDescriptor(o,i);void 0!==l&&l.enumerable&&(t[i]=o[i])}}return t}});
  window.env = {};
  var request = new XMLHttpRequest();
  request.open('GET', '/api/frontend_env_vars', true);
  request.send(null);
  function loadScript(src) {
    const script = document.createElement('script');
    script.src = src;
    document.body.append(script);
  }
  request.addEventListener('readystatechange', () => {
    if (request.status === 200) {
      if (request.readyState === 4) {
        Object.assign(window.env, JSON.parse(request.response).settings);
        loadScript('assets/vendor.js');
        loadScript('assets/app-frontend.js');
      }
    }
  }, false);
</script>

给予:

enter image description here

必填:GroupFirstValue列,如下所示。

enter image description here

这个想法是使用一个lambda公式来获取每个组的“第一个”值。例如,“ a”的第一个值为0,“ b”的第一个值为3,“ c”的为第一个值是7。这就是为什么这些数字出现在GroupFirstValue列中的原因。

注意:我知道我可以分2个步骤进行操作...一个是原始df,第二个是按df分组,然后将它们合并在一起。想法是看是否可以在一个步骤中更有效地完成此操作。提前非常感谢!

2 个答案:

答案 0 :(得分:1)

groupby并首先使用

df.groupby('Item')['Value'].first()

或者您可以使用transform并将其分配给框架中的新列

df['new_col'] = df.groupby('Item')['Value'].transform('first')

答案 1 :(得分:1)

使用maskduplicated

df['GroupFirstValue'] = df.Value.mask(df.Item.duplicated())

Out[109]:
  Item  Value  GroupFirstValue
0    a      0              0.0
1    a      1              NaN
2    a      2              NaN
3    b      3              3.0
4    b      4              NaN
5    b      5              NaN
6    b      6              NaN
7    c      7              7.0
8    c      8              NaN
9    c      9              NaN