以下示例:
<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>
给予:
必填:GroupFirstValue列,如下所示。
这个想法是使用一个lambda公式来获取每个组的“第一个”值。例如,“ a”的第一个值为0,“ b”的第一个值为3,“ c”的为第一个值是7。这就是为什么这些数字出现在GroupFirstValue列中的原因。
注意:我知道我可以分2个步骤进行操作...一个是原始df,第二个是按df分组,然后将它们合并在一起。想法是看是否可以在一个步骤中更有效地完成此操作。提前非常感谢!
答案 0 :(得分:1)
groupby并首先使用
df.groupby('Item')['Value'].first()
或者您可以使用transform并将其分配给框架中的新列
df['new_col'] = df.groupby('Item')['Value'].transform('first')
答案 1 :(得分:1)
使用mask
和duplicated
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