python - 如何随时间创建重复的数据框并将其映射到时间列表?

标签 python pandas date dataframe

我创建了以下数据框:

df = pd.DataFrame()
df['date'] = pd.date_range(start="2019-12-01", end="2019-12-20", freq='D')
Output:
    date
0   2019-12-01
1   2019-12-02
2   2019-12-03
3   2019-12-04
4   2019-12-05
5   2019-12-06
6   2019-12-07
7   2019-12-08
8   2019-12-09
9   2019-12-10
10  2019-12-11
11  2019-12-12
12  2019-12-13
13  2019-12-14
14  2019-12-15
15  2019-12-16
16  2019-12-17
17  2019-12-18
18  2019-12-19
19  2019-12-20

我有以下两行

Line Start        End         Amount
A    2019-12-01  2019-12-08   100
B    2019-12-06  2019-12-15   200

我想得到以下结果:

Output:
    date         amount   line
0   2019-12-01   100       A
1   2019-12-02   100       A
2   2019-12-03   100       A
3   2019-12-04   100       A
4   2019-12-05   100       A
5   2019-12-06   300       A,B
6   2019-12-07   300       A,B
7   2019-12-08   300       A,B
8   2019-12-09   200       B
9   2019-12-10   200       B 
10  2019-12-11   200       B
11  2019-12-12   200       B
12  2019-12-13   200       B
13  2019-12-14   200       B
14  2019-12-15   200       B
15  2019-12-16   0
16  2019-12-17   0
17  2019-12-18   0
18  2019-12-19   0
19  2019-12-20   0

我该怎么做才能实现这一目标?我尝试使用“ map ”功能,但无法获得结果。

抱歉,如果这两行有一个索引,我怎样才能在结果中也添加该列?

最佳答案

试试这个。假设你的第二个列表是一个数据框

import pandas as pd
df = pd.DataFrame()
df['date'] = pd.date_range(start="2019-12-01", end="2019-12-20", freq='D')

df2 = pd.DataFrame({"Start":["2019-12-01","2019-12-06"],"End":["2019-12-08","2019-12-15"],"Amount":[100,200]})
df2["Start"] = pd.to_datetime(df2["Start"])
df2["End"] = pd.to_datetime(df2["End"])

def f(x):

    df_ = df2[(df2.Start<= x) & (df2.End>=x)]["Amount"]
    v = df_.values
    i = df_.index.values      
    return v,i

s=df.date.apply(lambda x: pd.Series({"amount":sum(f(x)[0]),"line":','.join(map(str, f(x)[1]))}))
df= pd.concat([df,s],axis=1)

此处的行是第二个数据框 (df2) 的索引。如果您需要从 1 开始的行,可以通过将索引值加 1 来更改此行。 i = df_.index.values+1
输出

          date  amount line
0  2019-12-01     100    0
1  2019-12-02     100    0
2  2019-12-03     100    0
3  2019-12-04     100    0
4  2019-12-05     100    0
5  2019-12-06     300  0,1
6  2019-12-07     300  0,1
7  2019-12-08     300  0,1
8  2019-12-09     200    1
9  2019-12-10     200    1
10 2019-12-11     200    1
11 2019-12-12     200    1
12 2019-12-13     200    1
13 2019-12-14     200    1
14 2019-12-15     200    1
15 2019-12-16       0     
16 2019-12-17       0     
17 2019-12-18       0     
18 2019-12-19       0     
19 2019-12-20       0 

关于python - 如何随时间创建重复的数据框并将其映射到时间列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59168837/

相关文章:

php - 获取查询结果时格式化日期

python - Pandas dataframe group by 不会删除分组键

python - swig 3.0.1、python 3 和 bool 数据类型

Pandas 分类类型不起作用

python - 使用列表读取 Pandas 中的列以创建新的分类列

javascript - 使用 momentjs 将日期转换为纪元然后返回日期

python - numpy 数组中两组值之间的距离

python - df.transform 中的 ValueError(lambda x : 0 if (x == 0) else (-np. log(-x) if x < 0 else np.log(x)))

python - Pandas - 有条件的 groupby

javascript - 日期-fns |如何格式化为 UTC