我正在清理数据,并有一个问题。我有一个联系人数据集和一个帐户数据集。我需要在“ContactID”上合并这两个数据帧。某些ContactID有多个帐户。因此,当我合并它们时,仍然有一些ContactID有多行。我需要组合这些行,以便将数字列相加在一起,同时仍然保留分类列。下面是一个示例:
当我合并时:
ContactID Value Type
1 800 A
1 70 A
2 100 B
3 300 A
4 200 C
5 500 B
5 600 B当我合并时,我需要数据是什么样子:
ContactID Value Type
1 870 A
2 100 B
3 300 A
4 200 C
5 1100 B我已经尝试过了:
fulldf.groupby(fulldf.ContactID).sum()但是,然后我只得到一个包含数值的数据帧。
发布于 2021-04-22 09:12:59
让我们检查一下dtype并创建groupby dict
out = df.groupby('ContactID').agg(df.dtypes.map({'O':'first'}).fillna('sum').to_dict())
ContactID Value Type
ContactID
1 2 870 A
2 2 100 B
3 3 300 A
4 4 200 C
5 10 1100 B发布于 2021-04-22 09:20:12
分组后,您可以将单个聚合函数应用于DataFrame的列。对于数字列使用sum,对于分类列使用第一个元素。
df.groupby("ContactID").agg(
{
"Value": lambda col: col.sum(),
"Type": lambda col: col.iloc[0],
}
)
# Output
ContactID Value Type
1 870 A
2 100 B
3 300 A
4 200 C
5 1100 Bhttps://stackoverflow.com/questions/67205331
复制相似问题