我有一个Pandas的数据框,看起来像这样:
Name start end
A 2000-01-10 1970-04-29
我想添加一个新列,以年、月、日为单位提供start
和end
列之间的差异。
因此,结果应如下所示:
Name start end diff
A 2000-01-10 1970-04-29 29y9m etc.
diff列也可以是datetime
对象或timedelta
对象,但对我来说关键是,我可以很容易地从其中获得 * Year * 和 * Month *。
我一直在尝试:
df['diff'] = df['end'] - df['start']
这将产生包含10848 days
的新列。但是,我不知道如何将天数转换为 * 29y9m等 *。
9条答案
按热度按时间k5ifujac1#
您可以尝试按以下方式创建一个包含年份的新列:
zzoitvuj2#
使用
relativedelta
非常简单:ubbxdtey3#
更简单的方法是使用date_range函数并计算其长度
z4iuyo4d4#
只需一个简单的功能,您就可以实现您的目标。
该函数通过简单的计算来计算年差和月差。
iecba09b5#
我认为这是最'Pandas'的方式来做到这一点,没有使用任何for循环或定义外部函数:
由于Pandas的timedelda64不允许对datetime对象进行简单的添加,因此必须使用map而不是apply。
czfnxgou6#
您可以尝试以下函数来计算差值-
其中row是 Dataframe
row
。我假设您的start
和end
列是datetime
对象。然后您可以使用DataFrame.apply()
函数将其应用到每一行。7cjasjjr7#
与@DeepSpace的回答类似,下面是一个类似SAS的实现:
用法:
js81xvg68#
你所做的基本上是减去日期,然后得到天数,将天数转换成字符串,然后用““分割,从结果列表中,天数是列表中的第一项。将其转换为整数,然后除以365。
x3naxklr9#
您可以找到总秒数并计算剩余时间:
对于Pandas
Series
,请使用dt
访问器:df['diff'].dt.total_seconds()
.