如何使用熊猫计算经过的月份?我写了以下内容,但这段代码并不优雅.你能告诉我一个更好的方法吗?
import pandas as pd
df = pd.DataFrame([pd.Timestamp('20161011'),
pd.Timestamp('20161101') ], columns=['date'])
df['today'] = pd.Timestamp('20161202')
df = df.assign(
elapsed_months=(12 *
(df["today"].map(lambda x: x.year) -
df["date"].map(lambda x: x.year)) +
(df["today"].map(lambda x: x.month) -
df["date"].map(lambda x: x.month))))
# Out[34]:
# date today elapsed_months
# 0 2016-10-11 2016-12-02 2
# 1 2016-11-01 2016-12-02 1
Run Code Online (Sandbox Code Playgroud) 在我的熊猫数据框中,我想找出月份之间的日期差异。该函数将.dt.to_period('M')产生一个MonthEnd对象,<11 * MonthEnds>而不是月份号。
我尝试使用更改列类型,pd.to_numeric()并使用删除字母re.sub("[^0-9]", "", 'blablabla123bla')。两者都不对一个MonthEnd对象起作用。
df['duration_dataset'] = df['date_1'].dt.to_period('M') - df['date_2'].dt.to_period('M')
Run Code Online (Sandbox Code Playgroud)
我预期为11,但输出为<11 * MonthEnds>。
这是最小数据帧
d = {'date_1': ['2018-03-31','2018-09-30'], 'date_2': ['2017-12-31','2017-12-31']}
df = pd.DataFrame(data=d)
df['date_1'] = pd.to_datetime(df['date_1'], format='%Y-%m-%d')
df['date_2'] = pd.to_datetime(df['date_2'], format='%Y-%m-%d')
df['duration_dataset'] = df['date_1'].dt.to_period('M') - df['date_2'].dt.to_period('M')
df
Run Code Online (Sandbox Code Playgroud) 我有两列是 datetime64[ns] 对象。我正在尝试确定它们之间的月数。
这些列是:
city_clean['last_trip_date']
city_clean['signup_date']
Run Code Online (Sandbox Code Playgroud)
格式为 YYYY-MM-DD
我试过
from dateutil.relativedelta import relativedelta
city_clean['months_active'] = relativedelta(city_clean['signup_date'], city_clean['last_trip_date'])
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)
有谁知道什么可能导致这个问题?我觉得这是计算月份数最准确的方法。