在pandas中,我如何操作列中选定的行子集?
特别是,如何在此处向列y添加1.0,仅在日期大于2016-08-04的位置?
>>> pandas.DataFrame(
... index=[datetime.date.today(), datetime.date.today() + datetime.timedelta(1)],
... data=[[1.2, 234], [3.3, 432]],
... columns=['x', 'y'])
x y
2016-08-04 1.2 234
2016-08-05 3.3 432
[2 rows x 2 columns]
我不介意这是否就地或返回新的数据帧。
本案的答案应该是:
x y
2016-08-04 1.2 234
2016-08-05 3.3 433
答案 0 :(得分:3)
如果将索引转换为DateTimeIndex,则会变得更容易:
df.index = pd.to_datetime(df.index)
df.loc[df.index > '2016-08-04', 'y'] += 1
df
Out:
x y
2016-08-04 1.2 234
2016-08-05 3.3 433
答案 1 :(得分:1)
作为非现场替代方案,您可以使用df.add
:
df.add(df.index > pd.to_datetime('2016-08-04'), axis=0, level="y")
答案 2 :(得分:1)
DatetimeIndex
或[{3}}结帐the docs以获取便利功能date_range
。您可以设置一个可以自然使用的DatetimeIndex
。
df = pandas.DataFrame(
[[1.2, 234], [3.3, 432]],
index=pd.DatetimeIndex(start='today', periods=2, freq='D', normalize=True),
columns=['x', 'y'])
df.loc[df.index > '2016-08-04', 'y'] += 1
答案 3 :(得分:0)
您可以在.where
列上使用y
方法。
df.y = df.y.where(df.index < datetime.date(2016, 8, 4), lambda k: k + 1)