小编jwa*_*zjr的帖子

如何使用熊猫聚合具有空值的布尔字段?

我是第一次使用 Pandas,但在聚合方面遇到了一些问题。我有一个包含三个计算字段的数据框,由这样的应用语句添加:

dataset['calculated_field'] = dataset.apply(
    lambda row: calculation_function(
        row['field1'],
        row['field2']
    ),
    axis = 1
)
Run Code Online (Sandbox Code Playgroud)

计算字段是布尔值,但有一个问题。它们可以包含空值。

我试图找到布尔列的平均值,每个平均值都忽略该列的空字段。

我试过这样的事情:

resultset = dataset.groupby(['grouping_field'])[['calculated_field','calculated_field_2','calculated_field_3']].mean()
Run Code Online (Sandbox Code Playgroud)

问题在于,由于 True/False/None 布尔值是“对象”类型,pandas 将列完全作为“讨厌”列删除.

但是,我无法将该列转换为 bool,因为它会使空值变为“False”

我还尝试了长路由并为每个聚合创建了 3 个单独的数据帧,因此我可以删除空值并转换为 bool(可以聚合):

dataset_for_field1 = dataset.dropna(subset = ['calculated_field']).copy()
dataset_for_field1['calculated_field'] = dataset_for_field1['calculated_field'].astype('bool')

result_for_field1 = dataset_for_field1.groupby(['grouping_field'])['calculated_field'].mean()
Run Code Online (Sandbox Code Playgroud)

这给了我我正在寻找的数据,但是在三个单独的数据框中。

有没有办法用每列的平均值获得一个数据框,而忽略空值?

python aggregate pandas

5
推荐指数
1
解决办法
3698
查看次数

Flask-sqlalchemy 独特的约束不起作用

我试图弄清楚为什么字段的“唯一”约束不起作用。我正在使用 Flask、SQLAlchemy 和 Sqlite。

考虑模型:

from app import db
from flask_login import UserMixin

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True)
    password = db.Column(db.String(64))
    email = db.Column(db.String(120), unique=True)

    def __repr__(self):
        return '<User %r>' % self.username
Run Code Online (Sandbox Code Playgroud)

我希望,由于用户名字段有一个唯一约束,它不允许我添加具有相同用户名的用户。不过,确实如此。

从外壳:

from app import db
from app.models import User

user = User(username='test')
user2 = User(username='test')

db.session.add(user)
db.session.commit()

db.session.add(user2)
db.session.commit()

User.query.all()
Run Code Online (Sandbox Code Playgroud)

输出:

[<User 'test'>, <User 'test'>]
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

python sqlalchemy unique-constraint

5
推荐指数
1
解决办法
1797
查看次数