You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中将数值列转换为年月时长类型

将年份和月份转换为可运算的时长类型

嘿,这个问题很常见!要把你的r_duration_1(年份)和r_duration_2(月份)转换成能进行统计运算的格式,核心思路就是把它们统一成同一个数值单位(比如总月数或总年数),这样计算平均值、总和这类操作就会非常直观。下面用Python的pandas来一步步实现:

1. 先构造你的数据框

首先我们先还原你给出的数据:

import pandas as pd

# 你的原始数据
data = {
    'r_duration_1': [3,4,1,5,4,0,7,3,5,9,9,0],
    'r_duration_2': [0,4,4,2,6,9,1,8,0,0,10,11]
}
df = pd.DataFrame(data)

2. 转换为统一的时长单位(推荐方案)

最可靠的方式是把所有时长转换成总月数(因为月份是固定的基础单位,不像年份有平闰年差异),或者再进一步转成总年数:

# 计算总月数:年份*12 + 月份
df['total_months'] = df['r_duration_1'] * 12 + df['r_duration_2']

# 可选:转换为总年数(方便以年为单位统计)
df['total_years'] = df['total_months'] / 12

3. 进行统计运算

现在你就可以轻松计算平均时长这类指标了:

# 计算平均时长(保留两位小数)
avg_months = df['total_months'].mean()
avg_years = df['total_years'].mean()

print(f"平均关系时长(按月):{avg_months:.2f}")
print(f"平均关系时长(按年):{avg_years:.2f}")

可选:转换为Timedelta类型

如果你需要用pandas的时间差类型(Timedelta)来操作,也可以这样转换,但要注意:pandas里的年份和月份是近似值(因为不同年份/月份的实际天数不同),所以这种方式更适合时间序列操作,而非精确的时长统计:

# 转换为Timedelta类型
df['duration_timedelta'] = pd.to_timedelta(df['r_duration_1'], unit='Y') + pd.to_timedelta(df['r_duration_2'], unit='M')

# 计算平均Timedelta
avg_timedelta = df['duration_timedelta'].mean()
print(f"平均关系时长(Timedelta):{avg_timedelta}")

总结

如果只是为了计算平均、总和这类统计量,优先选择转换为总月数/总年数的数值型方案,它既精确又直观,完全满足你的运算需求。

内容的提问来源于stack exchange,提问作者Maayan Klimenko Feinstein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:02:36