如何用P中的行值总和创建新列

时间:2019-11-19 12:55:42

标签: python pandas

我有一个有趣的项目,并且陷入了数据清理的关键部分:我不知道如何根据特定行/列的值创建总列

我的数据框具有以下信息:

CustomerID ActivityType
01134A       Email
01134B       Email
01134A       Call
01134B       Email

我想要的输出是

 CustomerID ActivityType TotalEmail TotalCall
01134A       Email         1           1
01134B       Email         2           0
01134A       Call          1           1
01134B       Email         2           0

我尝试过

df['EmailTotal']='df.groupby('ActivityType'=='Email').transform('sum')

3 个答案:

答案 0 :(得分:4)

DataFrame.joincrosstab一起使用,并为更改列名称添加DataFrame.add_prefix

df = df.join(pd.crosstab(df.CustomerID, df.ActivityType).add_prefix('Total'), on='CustomerID')
print (df)
  CustomerID ActivityType  TotalCall  TotalEmail
0     01134A        Email          1           1
1     01134B        Email          0           2
2     01134A         Call          1           1
3     01134B        Email          0           2

编辑:

您的解决方案应通过比较,转换为整数并按df.CustomerIDtransform系列进行sum来改变:

df['ETotal']=df.ActivityType.eq('Email').astype(int).groupby(df.CustomerID).transform('sum')
df['CTotal']= f.ActivityType.eq('Call').astype(int).groupby(df.CustomerID).transform('sum')

答案 1 :(得分:0)

我认为您应该按文档阅读:)

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html

分组依据将按每个唯一值或键列中给出的值的唯一组合进行分组。

YourDataFrame.groupby(“ ActivityType”)将在内存中为每个ActivityType值创建一种数据框,您看不到这样的数据结构。

您现在需要应用agg函数(在我们的示例中),您需要求和,然后简单地应用sum:)

YourDataFrame.groupby(“ ActivityType”)。sum()将为您提供每个组的总和。

由您决定是否要在此步骤之后旋转:)

答案 2 :(得分:0)

您可以在2个单独的数据框中获取汇总,然后将其与父数据框合并 例如

nn.CrossEntropyLoss