Python 在分组数据框上创建新列
我想创建一个新列,该列由使用当前数据框中的多个列的组计算。在Python 在分组数据框上创建新列,python,pandas,Python,Pandas,我想创建一个新列,该列由使用当前数据框中的多个列的组计算。在R(tidyverse)中基本上是这样的: 实现此目的的首选方法是什么(理想情况下无需对数据进行排序?添加参数group\u keys=False,以避免多索引,从而可能分配回新列: data['d'] = data.groupby('a', group_keys=False).apply(create_new_column) 备选方案是删除第一级: data['d'] = data.groupby('a').apply(create
R
(tidyverse
)中基本上是这样的:
实现此目的的首选方法是什么(理想情况下无需对数据进行排序?添加参数
group\u keys=False
,以避免多索引
,从而可能分配回新列:
data['d'] = data.groupby('a', group_keys=False).apply(create_new_column)
备选方案是删除第一级:
data['d'] = data.groupby('a').apply(create_new_column).reset_index(level=0, drop=True)
详细信息:
print (data.groupby('a').apply(create_new_column))
a
1 0 1
2 2
5 0
2 1 0
3 2
6 3
3 4 0
dtype: int64
print (data.groupby('a', group_keys=False).apply(create_new_column))
0 1
2 2
5 0
1 0
3 2
6 3
4 0
dtype: int64
现在,您也可以用python实现它,就像在R中那样:
>>从datar.all导入c、f、TIBLE、cumsum
>>>
>>>数据=TIBLE(
…a=c(1,2,1,2,3,1,2),
…b=c(1,1,1,1,1,1,1,1),
…c=c(1,0,1,1,0,0,1),
... )
>>>
>>>(数据>>
…组员(f.a)>>
…变异(d=cumsum(f.b)*f.c))
a、b、c、d
0 1 1 1 1
1 2 1 0 0
2 1 1 1 2
3 2 1 1 2
4 3 1 0 0
5 1 1 0 0
6 2 1 1 3
[组:['a'](n=3)]
我是这个包裹的作者。如果您有任何问题,请随时提交。这正是我想要的。谢谢
data['d'] = data.groupby('a').apply(create_new_column).reset_index(level=0, drop=True)
print (data)
a b c d
0 1 1 1 1
1 2 1 0 0
2 1 1 1 2
3 2 1 1 2
4 3 1 0 0
5 1 1 0 0
6 2 1 1 3
print (data.groupby('a').apply(create_new_column))
a
1 0 1
2 2
5 0
2 1 0
3 2
6 3
3 4 0
dtype: int64
print (data.groupby('a', group_keys=False).apply(create_new_column))
0 1
2 2
5 0
1 0
3 2
6 3
4 0
dtype: int64