我真的很困惑,为什么只显示 False 结果而不是像 0.8 那样,因为第 3 列(Value3)有 4 个 true 和 1 个 false。我读到平均值应该是可能的,但我无法解决它
也许有人可以给我一点提示我做错了什么?
data = [
{
"Datum": "2019-05-11",
"Value1": True,
"Value2": 10,
"Value3": False,
"Value4": 20
},
{
"Datum": "2019-05-11",
"Value1": True,
"Value2": 20,
"Value3": True,
"Value4": 40
},
{
"Datum": "2019-05-11",
"Value1": True,
"Value2": 20,
"Value3": True,
"Value4": 40
},
{
"Datum": "2019-05-11",
"Value1": True,
"Value2": 10,
"Value3": True,
"Value4": 20
},
{
"Datum": "2019-05-11",
"Value1": True,
"Value2": 20,
"Value3": True,
"Value4": 40
},
{
"Datum": "2019-05-12",
"Value1": True,
"Value2": 30,
"Value3": True,
"Value4": 50
},
{
"Datum": "2019-05-12",
"Value1": True,
"Value2": 40,
"Value3": True,
"Value4": 60
}
]
df = pd.DataFrame(data)
ordered_df = df.groupby("Datum").agg("mean")
Run Code Online (Sandbox Code Playgroud)
结果是:
ordered_df["Value3"]
Datum
2019-05-11 False
Name: Value3, dtype: bool
Run Code Online (Sandbox Code Playgroud)
我期望这样的事情:
Datum
2019-05-11 0.8
2019-05-12 1.0
Name: Value3, dtype: float64
Run Code Online (Sandbox Code Playgroud)
编辑编辑编辑 有人可以尝试一下这个数据吗?
比我做的 DataFrame 和 groupby 的东西......仍然不是指 bool 值
input_data = data["data"]
df = pd.DataFrame(input_data)
ordered_df = df.groupby("Datum").agg("mean")
ordered_df["Notabschaltung"]
Run Code Online (Sandbox Code Playgroud)
还是一样
Datum
2019-11-12 False
Name: Notabschaltung, dtype: bool
Run Code Online (Sandbox Code Playgroud)
使用第二个例子我确实得到了错误。
为了克服这个问题,你可以使用:
df["Notabschaltung"] = df["Notabschaltung"]*1
Run Code Online (Sandbox Code Playgroud)
这会将 True 转换为 1,将 False 转换为 0,然后
ordered_df = df.groupby("Datum").agg("mean")
ordered_df["Notabschaltung"]
Run Code Online (Sandbox Code Playgroud)
基准
2019-11-12 0.0
名称:Notabschaltung,dtype:int64