use*_*235 1 python indexing time-series pandas
对于在 pandas 中创建的以下数据表,
Date Score Study_Date
02/2011 70 11/2012
03/2011 72 11/2012
10/2011 60 11/2012
12/2011 50 11/2012
01/2012 40 11/2012
02/2012 60 11/2012
03/2012 75 11/2012
11/2012 70 11/2012
12/2012 70 11/2012
01/2013 30 11/2012
02/2013 20 11/2012
04/2013 60 11/2012
06/2013 80 11/2012
Run Code Online (Sandbox Code Playgroud)
我想将日期早于研究日期的行的所有分数替换为 0。
我尝试了以下方法:
df[df.Date < df.Study_Date, 'Score']=0
Run Code Online (Sandbox Code Playgroud)
但我得到:
类型错误:“系列”对象是可变的,因此它们不能被散列
任何帮助将不胜感激。
用于.loc
分配您的值,将感兴趣的列命名为第二个“参数”。这里的前两行只是为了确保您的日期列是正确的datetime
系列(如果它们已经是正确的,您可以跳过它们dtype
)。
# Make sure your columns are datetimes:
df['Date'] = pd.to_datetime(df.Date)
df['Study_Date'] = pd.to_datetime(df.Study_Date)
# Use .loc
df.loc[df.Date < df.Study_Date, 'Score'] = 0
Date Score Study_Date
0 2011-02-01 0 2012-11-01
1 2011-03-01 0 2012-11-01
2 2011-10-01 0 2012-11-01
3 2011-12-01 0 2012-11-01
4 2012-01-01 0 2012-11-01
5 2012-02-01 0 2012-11-01
6 2012-03-01 0 2012-11-01
7 2012-11-01 70 2012-11-01
8 2012-12-01 70 2012-11-01
9 2013-01-01 30 2012-11-01
10 2013-02-01 20 2012-11-01
11 2013-04-01 60 2012-11-01
12 2013-06-01 80 2012-11-01
Run Code Online (Sandbox Code Playgroud)
该语句读作(伪代码):查找dataframe 中loc
列的值,其中.Score
df
df.Date < df.Study_Date
您的代码有问题
理论上,您可以在没有该语句的情况下执行此操作loc
,与您尝试的操作类似,但这涉及链式索引(pandas
会给您一个警告),并且通常不建议这样做,原因很充分:
df['Score'][df.Date < df.Study_Date] = 0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1173 次 |
最近记录: |