我有一个有趣的项目,并且陷入了数据清理的关键部分:我不知道如何根据特定行/列的值创建总列
我的数据框具有以下信息:
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')
答案 0 :(得分:4)
将DataFrame.join
与crosstab
一起使用,并为更改列名称添加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.CustomerID
和transform
系列进行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