我有一个包含2列的数据框:
F_Date Count
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
01/09/2019 1421
我想创建一个新的date_2列,这样对于1/5的计数值(在我们的示例中为1421 * 20),我们有F_date +1;对于2/5的计数值,我们有F_Date + 2,其他1/5的值是F_date + 3,最后1/5的值是F_Date +4。
在我们的示例中,输出为
1421/5 = 284.2(四舍五入到最接近的284)条目应具有F_Date + 1 1421/5 = 284 * 2 = 568个条目应具有F_Date + 2
1421/5 = 284个条目应具有F_Date + 3
1421/5 = 284 + 1(由于四舍五入后将保留1,因此F_Date + 4
预期的输出列
F_Date Count Date_2
任何人都可以提供帮助。
答案 0 :(得分:1)
如果我对您的理解正确:
import pandas as pd
import numpy as np
old_df = pd.DataFrame({'F_Date': ["01/09/2019" for _ in range(1421)],
"Count": [1421 for _ in range(1421)]})
def split_dates(old):
df = old.copy()
df["Date_2"] = np.where((df.index//(df["Count"]//5)).astype(int)<4,
(df.index//(df["Count"]//5)).astype(int),
4)
df["F_Date"] = pd.to_datetime(df["F_Date"],format="%M/%d/%Y")
df["Date_2"] = df["F_Date"]+pd.to_timedelta(df["Date_2"], 'd')
return df
new_df = split_dates(old_df)
print (new_df)
#
F_Date Count Date_2
0 2019-01-09 00:01:00 1421 2019-01-09 00:01:00
1 2019-01-09 00:01:00 1421 2019-01-09 00:01:00
2 2019-01-09 00:01:00 1421 2019-01-09 00:01:00
3 2019-01-09 00:01:00 1421 2019-01-09 00:01:00
4 2019-01-09 00:01:00 1421 2019-01-09 00:01:00
... ... ... ...
1416 2019-01-09 00:01:00 1421 2019-01-13 00:01:00
1417 2019-01-09 00:01:00 1421 2019-01-13 00:01:00
1418 2019-01-09 00:01:00 1421 2019-01-13 00:01:00
1419 2019-01-09 00:01:00 1421 2019-01-13 00:01:00
1420 2019-01-09 00:01:00 1421 2019-01-13 00:01:00
[1421 rows x 3 columns]
print (new_df.groupby(["Date_2"]).count())
#
F_Date Count
Date_2
2019-01-09 00:01:00 284 284
2019-01-10 00:01:00 284 284
2019-01-11 00:01:00 284 284
2019-01-12 00:01:00 284 284
2019-01-13 00:01:00 285 285