Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在分组数据框上创建新列_Python_Pandas - Fatal编程技术网

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