如何在Pandas(python 3)中组合不同的数据集?

时间:2014-08-26 15:49:27

标签: python pandas

我的问题围绕在pandas中使用groupby函数并尝试组合两个数据集。

现在我的数据看起来像这样:

Name     Price
James    2
Jon      3 
James    0
Bob      4
Bob      0

我需要的是来创建包含三个指标的数据集:每个名称的价格总和,每个名称的价格为零的数字实例的数量,以及每个名字出现的时间..

理想情况下,输出看起来像这样

Name     Price   Count of Frequency      Count of Zero
James    2             2                       1
Jon      3             1                       0
Bob      4             1                       1

现在我的代码看起来像:

newlist = df1.join(s)
countif = newlist.groupby(['KW']).size().reset_index()
group = newlist.groupby(['KW'])
sumif = group.sum().reset_index()
zero = newlist[newlist['Price'] == 0.0]
zero2 = zero.groupby(['KW']).size().reset_index()
concat = pd.concat([sumif,countif,zero2], axis=1)

但是这有许多缺点:它是unpythonic和低效的,它会创建KW列的重复行,并且它不会以统一的方式排列所有数据,因为当" zero2"变量只显示那些价格为0的KW,所以我得到这样的结果:

 KW      Price      KW       0      KW       0
 James    2         james    2      James    1
 Bob      4         Bob      2      Bob      1

1 个答案:

答案 0 :(得分:2)

您正在寻找带有申请的群组。

def func(x):
    return pd.Series({'Obs': len(x)
                    , 'Sum': x.price.sum()
                    , 'Zeros': len(x[x.price==0])})

用法:

df.groupby(["name"]).apply(func)