Python Pandas Dates数据框架

f87krz0w  于 2023-06-04  发布在  Python
关注(0)|答案(2)|浏览(153)

我是一个初学者,目前正在尝试使用pandas创建以下数据结构/表:
3列表
| 销售日期|装运日期|交货日期|
| - -----|- -----|- -----|
1.首先,我想在列1(销售日期)中创建随机日期。例如2022年的50个日期
1.第二,我想生产同样数量的枣子 第2栏(装运日期)。但是,这些值应取决于 在第1栏中,在每种情况下加上一定的天数。例如:列1上的随机日期是01.01.2023,那么列2上的日期应该是+5天,所以06.01.2023。
1.第三,同样的情况应该发生在列3上,但不同之处在于,这取决于列2。
最后一个例子:第1列中随机生成的日期是01.01.2023添加到此日期的日期随机数(+3),并为第2列生成新日期:04.01.2023日期随机数(+2)添加到新日期并为第3列生成新日期:06.01.2023
我们得到具有以下内容的数据结构:
| 销售日期|装运日期|交货日期|
| - -----|- -----|- -----|
| 2023年1月1日|2023年01月04日|2023年01月06日|
谢谢你!
最好
我尝试在python pandas中创建一个3列的表。第一列应包含随机日期。第二列应包含取决于列1 +x天的日期。第3列相同,但取决于第2列。

hgncfbus

hgncfbus1#

演示如何实现此目的的示例

import random
from datetime import timedelta

import pandas as pd

# Set the number of dates and the starting year
num_dates = 50
start_year = 2022

# Generate random dates for column 1
dates_column1 = pd.date_range(start=f"1/1/{start_year}", periods=num_dates)

# Function to add a specific number of days to a given date
def add_days(date, num_days):
    return date + timedelta(days=num_days)

# Generate dates for column 2 based on column 1
dates_column2 = [add_days(date, random.randint(1, 10)) for date in dates_column1]

# Generate dates for column 3 based on column 2
dates_column3 = [add_days(date, random.randint(1, 10)) for date in dates_column2]

# Create a DataFrame with the three columns
df = pd.DataFrame({"Date of sale": dates_column1,
                   "Date of shipment": dates_column2,
                   "Date of delivery": dates_column3})

# Convert the dates to the desired format
df["Date of sale"] = df["Date of sale"].dt.strftime("%d.%m.%Y")
df["Date of shipment"] = df["Date of shipment"].dt.strftime("%d.%m.%Y")
df["Date of delivery"] = df["Date of delivery"].dt.strftime("%d.%m.%Y")

# Print the resulting DataFrame
print(df)
#    Date of sale Date of shipment Date of delivery
# 0    01.01.2022       04.01.2022       06.01.2022
# 1    02.01.2022       09.01.2022       13.01.2022
# 2    03.01.2022       11.01.2022       15.01.2022
# 3    04.01.2022       10.01.2022       12.01.2022
# ...
ogq8wdun

ogq8wdun2#

可以使用pd.to_timedelta

num = 10  # 50
origin = pd.Timestamp('2023-01-01')

days1 = pd.to_timedelta(np.random.randint(0, 366, num), unit='D')
days2 = days1 + pd.to_timedelta(np.random.randint(1, 10, num), unit='D')
days3 = days2 + pd.to_timedelta(np.random.randint(1, 10, num), unit='D')
df = pd.DataFrame({'Sales': origin + days1,
                   'Shipment': origin + days2,
                   'Delivery': origin + days3})

输出:

>>> df
       Sales   Shipment   Delivery
0 2023-08-12 2023-08-18 2023-08-22
1 2023-07-09 2023-07-14 2023-07-20
2 2023-07-07 2023-07-10 2023-07-19
3 2023-11-26 2023-12-02 2023-12-08
4 2023-11-17 2023-11-22 2023-11-29
5 2023-12-01 2023-12-05 2023-12-14
6 2023-07-09 2023-07-12 2023-07-16
7 2023-10-07 2023-10-16 2023-10-20
8 2023-02-28 2023-03-05 2023-03-14
9 2023-10-22 2023-10-23 2023-11-01

相关问题