有人可以向我解释一下之间的区别
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]
我错过了什么?
我有这样的数据帧:
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
我确实有一个 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) 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) 我确实有一堂课:
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 方法与函数方面是否正确:
方法是类的一部分。
函数是在类之外定义的。
所以例如
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定义功能。我对么?
我有以下模板:
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 规则。
有没有其他更好的方法来显示谁登录并使用它为每个登录用户创建单独的视图,如下所示:
每个用户都可以查看自己的视图、编辑它、添加新文章并将其视图的访问权限授予其他用户/用户组?
?
我有一个带有 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)
它很慢。如何改进呢?
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 个整数元素。
当我运行下面的代码时:
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