使用单独的列整数向pandas中的列添加天

2024-06-16 10:48:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过了日期时间.timedelta在这个系列中pd.日期偏移. 两者都不起作用。我知道我可以迭代这个数据帧并手动添加它们,但我正在寻找一种矢量化的方法。你知道吗

示例:

d = {pd.Timestamp('2015-01-02'):{'days_delinquent':11}, pd.Timestamp('2015-01-15'):{'days_delinquent':23}}
>>> dataf = pd.DataFrame.from_dict(d,orient='index')
>>> dataf
            days_delinquent
2015-01-02               11
2015-01-15               23

只是想在下面的行中加上11天和23天。我在现实生活中添加到的列不是索引,但我显然可以在执行此操作时将其作为索引。你知道吗

我猜这不是自解释的,但是输出将是一个带有日期的新列(在本例中是索引)+日期时间.timedelta(days=dataf['拖欠天数'])


Tags: 数据方法from示例dataframe时间手动days
3条回答

您可以将days_delinquent列转换为timedelta64[D](以天为单位的偏移量),并将其添加到索引中,例如:

import pandas as pd

d = {pd.Timestamp('2015-01-02'):{'days_delinquent':11}, pd.Timestamp('2015-01-15'):{'days_delinquent':23}}
df = pd.DataFrame.from_dict(d,orient='index')
df['returned_on'] = df.index + df.days_delinquent.astype('timedelta64[D]')

更好的(谢谢DSM)是使用pd.to_timedelta,因此如果需要,单位更容易更改:

df['returned_on'] = df.index + pd.to_timedelta(df.days_delinquent, 'D')

给你:

            days_delinquent returned_on
2015-01-02               11  2015-01-13
2015-01-15               23  2015-02-07
import pandas as pd

d = {pd.Timestamp('2015-01-02'):{'days_delinquent':11}, 
    pd.Timestamp('2015-01-15'):{'days_delinquent':23}}
df = pd.DataFrame.from_dict(d,orient='index')

def add_days(x):
    return x['index'] + pd.Timedelta(days=x['days_delinquent'])

df.reset_index().apply(add_days,axis=1)

输出:

0   2015-01-13
1   2015-02-07
dtype: datetime64[ns]
dataf['result'] = [d + datetime.timedelta(delta) 
                   for d, delta in zip(dataf.index, dataf.days_delinquent)]

dataf
Out[56]: 
            days_delinquent     result
2015-01-02               11 2015-01-13
2015-01-15               23 2015-02-07

相关问题 更多 >