在对数据应用groupby之后,我想保存一些值。我在数据框中有两列,x1和x2。通过x2列应用groupby函数,并在group的第一个值之前从x1获取值。
df=pd.DataFrame({'x1':[3,4,5,6,7,8,9,2,7],x2:[1,3,3,3,2,2,2,2]})
x1 x2
0 3 1
1 4 3
2 5 3
3 6 3
4 7 2
5 8 2
6 9 2
7 2 2
8 7 2
desired output:
df_out=pd.DataFrame({'x1_value':[3,6]})
x1_value
0 3
1 6
答案 0 :(得分:1)
设置
Q
您可以将x2分组移动1个位置,然后取第一个x1。
df=pd.DataFrame({'x1':[3,4,5,6,7,8,9,2,7],'x2':[1,3,3,3,2,2,2,2,2]})
x1 x2
0 3 1
1 4 3
2 5 3
3 6 3
4 7 2
5 8 2
6 9 2
7 2 2
8 7 2
构建临时列的另一个更复杂的解决方案:
df.groupby(df.x2.shift(-1),sort=False).x1.first()
x2
3 3.0
2 6.0
Name: x1_new, dtype: float64
答案 1 :(得分:1)
这是使用熊猫0.25中的nth
的一种方式:
window.googletag = window.googletag || {cmd: []};
googletag.cmd.push(function() {
var w = Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
);
if(w>=970) {
googletag.defineSlot('/00000000000/ad', [[970, 90], [728, 90], [468, 60], [320, 50], [300, 100], [234, 60]], 'div-gpt-ad-00000000000000-0').addService(googletag.pubads());
} else if(w>=728) {
googletag.defineSlot('/00000000000/ad', [[728, 90], [468, 60], [320, 50], [300, 100], [234, 60]], 'div-gpt-ad-00000000000000-0').addService(googletag.pubads());
} else if(w>=468) {
googletag.defineSlot('/00000000000/ad', [[468, 60], [320, 50], [300, 100], [234, 60]], 'div-gpt-ad-00000000000000-0').addService(googletag.pubads());
} else if(w>=320) {
googletag.defineSlot('/00000000000/ad', [[320, 50], [300, 100], [234, 60]], 'div-gpt-ad-00000000000000-0').addService(googletag.pubads());
} else if(w>=300) {
googletag.defineSlot('/00000000000/ad', [[300, 100], [234, 60]], 'div-gpt-ad-00000000000000-0').addService(googletag.pubads());
} else if(w>=234) {
googletag.defineSlot('/00000000000/ad', [[234, 60]], 'div-gpt-ad-00000000000000-0').addService(googletag.pubads());
} else {
googletag.defineSlot('/00000000000/ad', [], 'div-gpt-ad-00000000000000-0').addService(googletag.pubads());
}
googletag.pubads().enableSingleRequest();
googletag.pubads().collapseEmptyDivs();
googletag.enableServices();
});
输出:
df=pd.DataFrame({'x1':[3,4,5,6,7,8,9,2,7],'x2':[1,3,3,3,2,2,2,2,2]})
df.groupby('x2', sort=False).nth(-1)[:-1]
详细信息:
x1
x2
1 3
3 6
获取每个组的最后一个值答案 2 :(得分:1)
以您的情况
df.groupby('x2').tail(1).iloc[:-1]
x1 x2
0 3 1
3 6 3