【问题标题】:Python Pandas: create new column contains date rangePython Pandas:创建包含日期范围的新列
【发布时间】:2020-08-18 23:17:49
【问题描述】:

我有包含 2 列的酒店 DataFrame:入住和退房。我想创建包含一系列日期的新列,从签到到签出。

示例:入住 = 2019-10-02,退房 = 2019-10-04。 新列应具有日期系列:2019-10-02、2019-10-03、2019-10-04。对每一行应用相同的逻辑。请告知我应该如何使用 Python Pandas。

【问题讨论】:

  • [pd.date_range(x, y) for x , y in zip(df.check-in,df.check_out)]

标签: python pandas


【解决方案1】:

你可以试试这个:

df['check_in'] = pd.to_datetime(df['check_in'])
df['check_out'] = pd.to_datetime(df['check_out'])
df['range'] = df.apply(lambda x: list(pd.date_range(x['check_in'], x['check_out'])), axis=1)
print(df)

    check_in  check_out                                              range
0 2019-10-02 2019-10-04  [2019-10-02 00:00:00, 2019-10-03 00:00:00, 201...

【讨论】:

    【解决方案2】:

    假设您的两列都在日期时间序列中可用。

    下面的代码应该给你一个所需格式的范围和新的列。

    df['range'] = df.apply(lambda x: pd.date_range(x['check_in'], x['check_out']).format('%Y-%m-%d')[1:], axis=1)
    

    【讨论】:

    • 这两个代码都对我有用,唯一的区别是日期格式。我想问:(1)我们可以使用 range(check_in, check_out) 代替 pd.date_range() 吗? (2) lambda x: pd.date_range(x['check_in'], x['check_out']; 中的“x”是指数据帧吗?(3) 我试过这样做:pd.date_range(df ['check_in'], df['check_out']) with an error: TypeError: Cannot convert input [0 2018-07-01. 这可能是什么原因?(4)使用pd.date_range()有什么区别有 apply() 和没有 apply()?
    • 1) range() 不能用于字符串,它只接受整数作为输入。 2) 是的,您可以在线检查 lambda 语法 3) df['check_in'] 这将返回一个 Series 而 pd.date_time 不接受它。它接受格式为日期的字符串 4) apply() 函数用于沿 DataFrame 或 Series 的轴应用函数。在这种情况下,axis1(列)为 check_in&check_out 列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2022-11-17
    相关资源
    最近更新 更多