【发布时间】:2021-06-29 12:32:49
【问题描述】:
我想对 pandas 数据框进行分组和聚合。 我有一个自定义聚合函数,它应该根据它所应用的系列的 dtype 来做不同的事情。 但是,某些列会无声无息地消失。它似乎与 dtype 条件有关。
在制作可重现示例的过程中,我注意到了一些奇怪的事情:
- 如果我先测试该系列是否为 dtype
string,然后对其他情况使用else语句,我的数字列将被静默删除 - 但是,如果我先测试
series.dtype == "int64",它会按预期工作。
这是我的可复制示例:
import pandas as pd
# reprex dataframe
groups = ["group1", "group1", "group2", "group2"]
numbers = [1, 2, 3, 4]
letters = ["a", "b", "c", "c"]
data = {"group": groups, "number": numbers, "letter": letters}
df = pd.DataFrame(data)
df["letter"] = df["letter"].astype("string")
# custom aggregation functions
def is_int(series):
if series.dtype == "int64":
return "int64"
else:
return "not an int"
def is_string(series):
if series.dtype == "string":
return "string"
else:
return "not a string"
# the confusing part
df.groupby("group").agg(is_int) # works as expected
df.groupby("group").agg(is_string) # the "number" column disappears silently
欢迎任何关于为什么会发生这种情况以及如何处理它的见解!
【问题讨论】:
标签: pandas dataframe pandas-groupby aggregate dtype