Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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_Aggregate - Fatal编程技术网

Python:通过聚合维度将聚合函数应用于变量并选择列

Python:通过聚合维度将聚合函数应用于变量并选择列,python,pandas,aggregate,Python,Pandas,Aggregate,我假设,我有一个包含变量V1、V2、V3的熊猫数据帧。我想执行以下聚合过程 myData.groupby(“V1”,as_index=False)[“V2”].sum() 然后将此结果与变量V3一起显示(如果可能的话,可以一步完成!)。我该怎么做,有什么建议吗?谢谢 编辑: 从原始数据帧: V1 V2 V3 1 2 4 2 1 3 1 4 1 我希望收到: V1 V2 V3 1 **6**

我假设,我有一个包含变量V1、V2、V3的熊猫数据帧。我想执行以下聚合过程 myData.groupby(“V1”,as_index=False)[“V2”].sum() 然后将此结果与变量V3一起显示(如果可能的话,可以一步完成!)。我该怎么做,有什么建议吗?谢谢

编辑: 从原始数据帧:

V1    V2    V3
 1     2     4
 2     1     3
 1     4     1
我希望收到:

V1    V2         V3
 1     **6**     4
 2     1         3
 1     **6**     1
所以保持V3的原样。有人能帮忙吗:)?

设置
考虑数据文件<代码> MyDATAs/COD>

myData = pd.DataFrame(dict(V1=[1, 1, 2, 2], V2=[2] * 4, V3=[3] * 4))

   V1  V2  V3
0   1   2   3
1   1   2   3
2   2   2   3
3   2   2   3

选项1

在我看来,执行这项任务最惯用的方式是

myData.groupby('V1', as_index=False).agg('sum')

   V1  V2  V3
0   1   4   6
1   2   4   6

选项2
设置索引

这也可以工作,但在设置和重置索引时有点笨拙

myData.set_index('V1').sum(level='V1').reset_index()

   V1  V2  V3
0   1   4   6
1   2   4   6

选项3

从长远来看,我们可以开始欣赏
pandas
为我们提供的api。如果性能是必须的,您有时可以(但不总是)减少您的执行时间,但您也承担了处理许多细微差别的责任
pandas
为您所做的事情。而且,几乎总是这样,代码不那么透明

u, f = np.unique(myData.V1.values, return_inverse=True)

pd.DataFrame(dict(
        V1=u,
        V2=np.bincount(f, myData.V2.values),
        V3=np.bincount(f, myData.V3.values)
    )).astype(myData.dtypes)

   V1  V2  V3
0   1   4   6
1   2   4   6

定时

%timeit myData.groupby('V1', as_index=False).agg('sum')
%timeit myData.set_index('V1').sum(level='V1').reset_index()

1000 loops, best of 3: 1.54 ms per loop
1000 loops, best of 3: 1.52 ms per loop

%%timeit
u, f = np.unique(myData.V1.values, return_inverse=True)

pd.DataFrame(dict(
        V1=u,
        V2=np.bincount(f, myData.V2.values),
        V3=np.bincount(f, myData.V3.values)
    )).astype(myData.dtypes)

1000 loops, best of 3: 654 µs per loop

嘿,你能给我们一些示例数据并解释一下你希望V3显示结果的方式吗?显示numpy解决方案是可以的,但需要注意的是,这些解决方案通常不是数据类型友好的,而且对于轻微的性能来说更为详细gain@Jeff我正试图将两者都展示出来。我越来越擅长突出显示数据类型处理,我认为冗长是不言而喻的(我认为)。我认为对于任何简单的香草潘达西来说,提出numpy解决方案都是很容易混淆的。我将编辑这个答案,并且我将制定一个脚本来与任何numpy风格的答案相衔接。@Jeff希望您能发现这些评论是合理的。