我有一个带有日期索引的熊猫数据框。我可以在给定的日期范围内更新其列中的所有列,但都可以,但是如果首先创建基于该列的新列,则该列不起作用:
#model.py
class Record(models.Model):
name = models.CharField(max_length=100,null=True)
category = models.CharField(max_length=100,null=True)
sell_price = models.DecimalField(max_digits=5,
decimal_places=2,null=True)
quantity = models.IntegerField(null=True)
quantity_to_sell =
models.DecimalField(max_digits=10,decimal_places=2,default=0)
manufac_date = models.DateField(blank=True,null=True )
expire_date = models.DateField(blank=True,null=True)
date_sold = models.DateTimeField(auto_now_add=True,null=True)
def __str__(self):
return self.name
#views.py
daily_record = Record.objects.annotate(
day=ExtractDay('date_sold')
).values('category','name').annotate(price=Sum('sell_price'),min_qty=M
in('quantity'),sum_price=
Min('sell_price'),qty_sold=Count('name')).order_by('category')
#print(str(daily_record.query))
输出:
import pandas as pd
df = pd.read_csv('https://pylie.com/dl/readings/bikes-nyc-pylie.csv', index_col=0)
df.index = pd.to_datetime(df.index)
print(df.tail(5))
df.loc['2016-10-29':]['temperature'] = 20.0
print(df.tail(5))
df['temperature_f'] = df['temperature'].copy()
df.loc['2016-10-29':]['temperature'] = 40.0
print(df.tail(5))
熊猫版本为0.24.1
答案 0 :(得分:1)
执行此操作:
df.loc['2016-10-29':, 'temperature'] = 20.0
在同一.loc调用中为索引和要更新的列添加选择器,否则不能保证将原始DataFrame更新。这也适用于更新现有列。
添加新列时,您无需使用.copy()
。因此,df['temperature_f'] = df['temperature']
就足够了。