小编Nul*_*yte的帖子

python Pandas DataFrame copy(deep = False)vs copy(deep = True)vs'='

有人可以向我解释一下之间的区别

df2 = df1

df2 = df1.copy()

df3 = df1.copy(deep=False)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有选项,并按如下方式执行:

df1 = pd.DataFrame([1,2,3,4,5])
df2 = df1
df3 = df1.copy()
df4 = df1.copy(deep=False)
df1 = pd.DataFrame([9,9,9])
Run Code Online (Sandbox Code Playgroud)

并返回如下:

df1: [9,9,9]
df2: [1,2,3,4,5]
df3: [1,2,3,4,5]
df4: [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

所以,我发现.copy()和之间的输出没有区别.copy(deep=False).为什么?

我希望返回一个选项'=',copy(),copy(deep = False) [9,9,9]

我错过了什么?

python deep-copy dataframe pandas

23
推荐指数
3
解决办法
1万
查看次数

熊猫根据一列中的值的条件一次覆盖多列中的值

我有这样的数据帧:

df = pd.DataFrame(data={
    'col0': [11, 22,1, 5]
    'col1': ['aa:a:aaa', 'a:a', 'a', 'a:aa:a:aaa'],
    'col2': ["foo", "foo", "foobar", "bar"],
    'col3': [True, False, True, False],
    'col4': ['elo', 'foo', 'bar', 'dupa']})
Run Code Online (Sandbox Code Playgroud)

我想在 col1 中的“:”上拆分后获取列表的长度,然后我想在长度 > 2 时覆盖这些值,或者在长度 <= 2 时不覆盖这些值。

理想情况下,尽可能快地排成一行。

目前,我尝试但它返回 ValueError。

df[['col1', 'col2', 'col3']] = df.loc[df['col1'].str.split(":").apply(len) > 2], ("", "", False), df[['col1', 'col2', 'col3']])
Run Code Online (Sandbox Code Playgroud)

编辑:col1 上的条件。EDIT2:感谢您提供的所有出色且快速提供的答案。惊人的!EDIT3:10^6 行计时:

@ansev 3.2657s

@jezrael 0.8922s

@anky_91 1.9511s

python apply pandas

12
推荐指数
3
解决办法
1191
查看次数

反转 DataFrame 中的单列

我确实有一个 DataFrame mxn 并且想以与列表翻转类似的方式翻转一列,例如:

list1 = [1,2,3,4]
list2 = list1[::1]
Run Code Online (Sandbox Code Playgroud)

所以 list2 看起来像这样:[4,3,2,1]

如何将类似于 DataFrame 的内容应用于列,但保持所有行和其他列的顺序,以便我仅翻转单列中的值:

例如

df1 =

    col1    col2
1    cat     1
2    dog     2
3    fish    3
4    bird    4
5    mouse   5
Run Code Online (Sandbox Code Playgroud)

至 df2

    col1    col2
1    cat     5
2    dog     4
3    fish    3
4    bird    2
5    mouse   1
Run Code Online (Sandbox Code Playgroud)

python list dataframe pandas

9
推荐指数
1
解决办法
9936
查看次数

django 按两级外键关系过滤

class AAA(models.Model):
    name = CharField

class BBB(models.Model):
    aaa = models.ForeignKey(AAA)
    name = CharField

class CCC(model.Model):
    bbb = models.ForeignKey(BBB)
Run Code Online (Sandbox Code Playgroud)

如何在按 AAA 名称过滤 CCC 对象的视图中创建过滤器?

我知道如何为 CCC 创建过滤器以按 BBB 名称过滤:

CCC.objects.filter(bbb__name=request.bbb.name)
Run Code Online (Sandbox Code Playgroud)

但我现在知道如何为两级关系创建一个合适的,如果有道理的话?

是吗:

CCC.objects.filter(aaa__name=request.bbb.aaa.name) ?

编辑:

模型.py

class Stage(models.Model):
    project = models.ForeignKey(Project)
    slug = models.SlugField(unique=True)
    stage_number = models.CharField(max_length = 10)
    stage_name = models.CharField(max_length = 10)
    zones = models.ManyToManyField(Zone, through='ZoneStage')


class SubStage(models.Model):
    sub_name = models.CharField(max_length=10)
    stage = models.ForeignKey(Stage)
    zones = models.ManyToManyField(Zone, through='ZoneSubStage')


class ZoneSubStage(models.Model):
    zone = models.ForeignKey(Zone)
    substage = models.ForeignKey(SubStage)
    value = models.PositiveSmallIntegerField(default=0) …
Run Code Online (Sandbox Code Playgroud)

django filter relationship

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

Python 类方法链接

我确实有一堂课:

class BaseModel:

    def __init__(self):
        pass

    def read_data(self):
        df = ...
        return df

    def transform_input(self, df):
        df = ...
        return df

    def execute(self, df):
        df = ...
        return df

    def run(self):
        data = self.read_data()
        data = self.transform_input(data)
        data = self.execute(data)
Run Code Online (Sandbox Code Playgroud)

如何避免这些方法相继调用?是否可以这样做:

data = self.read_data().transform_input().execute()
Run Code Online (Sandbox Code Playgroud)

是否可以以某种方式链接这些方法并解决在此方法链中传递参数(数据)的问题?

python oop chaining

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

Python 方法与函数

我正在寻求确认我的想法在 Python 方法与函数方面是否正确:

方法是类的一部分。

函数是在类之外定义的。

所以例如

class FooBar(object):
    def __init__(self):
        pass
    def foo(self):
        pass


def bar():
    pass


if __name__ == '__main__':
    fb = FooBar()
Run Code Online (Sandbox Code Playgroud)

我理解def foo定义方法和def bar定义功能。我对么?

python methods class function

3
推荐指数
2
解决办法
7143
查看次数

django:如何在每个模板中显示用户登录?

我有以下模板:

base.html & article.html & article.html

base.html 包含标题:

<h6>User logged-in : {{full_name}}</h6>
Run Code Online (Sandbox Code Playgroud)

article.html 和 article.html 扩展了 base.html

在我通过的 Django 应用程序“文章”中的视图中

args['full_name'] = request.user.username 
Run Code Online (Sandbox Code Playgroud)

进而:

return render_to_response('article.html', args, context_instance=RequestContext(request)) 
Run Code Online (Sandbox Code Playgroud)

我对函数文章也这样做。它允许我将变量传递给articles.html 和article.html 中的扩展base.html 标头

这意味着我需要对 def edit_article 和函数 create_article 做同样的事情,我以复制自己结束,所以我打破了基本的 django 规则。

有没有其他更好的方法来显示谁登录并使用它为每个登录用户创建单独的视图,如下所示:

每个用户都可以查看自己的视图、编辑它、添加新文章并将其视图的访问权限授予其他用户/用户组?

?

django templates views

2
推荐指数
1
解决办法
1267
查看次数

极地日期时间 5 分钟楼层

我有一个带有 datetime[ns] 类型的时间戳列的极坐标数据帧,其值为2023-03-08 11:13:07.831 我想使用极坐标效率将时间戳四舍五入到 5 分钟下限。

现在我这样做:

import arrow

def timestamp_5minutes_floor(ts: int) -> int:
    return int(arrow.get(ts).timestamp() // 300000 * 300000)

df.with_columns([
    pl.col("timestamp").apply(lambda x: timestamp_5minutes_floor(x)).alias("ts_floor")
    ])
Run Code Online (Sandbox Code Playgroud)

它很慢。如何改进呢?

python timestamp floor python-polars

2
推荐指数
1
解决办法
892
查看次数

来自序列的Scala案例类

case class Foo(a: Int, b: Int, c: Int)


val s = Seq(1, 2, 3)
val t = (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

我知道我可以从元组创建案例类:

Foo.tupled(t)
Run Code Online (Sandbox Code Playgroud)

但是如何从 Sequence 创建案例类?我在序列中有 ~10 个整数元素。

scala tuples sequence

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

python 数据类没有属性 post_init

当我运行下面的代码时:

import pandas as pd
from dataclasses import dataclass


@dataclass
class SomeClass:
    df_in: pd.DataFrame

    def __post__init__(self):
        self.b = 1


if __name__ == '__main__':
    df_in = pd.DataFrame([])
    p = SomeClass(df_in=df_in)
    p.b
Run Code Online (Sandbox Code Playgroud)

我明白了

AttributeError: 'SomeClass' object has no attribute 'b'
Run Code Online (Sandbox Code Playgroud)

为什么?

编辑:

我是否正确使用post__init因为数据类中没有init

python post init

0
推荐指数
1
解决办法
1720
查看次数