如何将数字添加到pandas数组的索引范围

时间:2016-08-03 23:19:56

标签: python pandas

在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

4 个答案:

答案 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)