下面是python中相当大的数据框的一小部分。
ID invoiceDate
1 2017-07-18
2 2017-10-17
3 2017-08-20
4 2017-09-05
5 2017-08-20
6 2017-11-08
7 2017-09-17
8 2017-11-10
9 2017-08-14
10 2017-08-24
鉴于感兴趣的时间段在2017-07-13
和2017-11-21
之间,相当于20周。我需要将invoiceDate
中的每个值映射到相应的星期数。例如,2017-07-18
映射到#1周(第一周分别在2017-07-13
和2017-07-19
处开始和结束),或者2017-08-20
映射到#6周(第六周开始并在第二周开始分别以2017-08-17
和2017-08-23
结尾)。 invoiceDate
是对象类型。
答案 0 :(得分:4)
将to_period
与频率“ W-Wed”一起使用会改变一周的开始时间。
s = df['invoiceDate'].dt.to_period('W-Wed').dt.week
df['Week_Num'] = (s - s.min() + 1)
df ['Week_Num'] =(df ['invoiceDate']。dt.to_period('W-Wed')。dt.week-
df ['invoiceDate']。dt.to_period('W-Wed')。dt.week.min()+ 1)
输出:
productID invoiceDate Week_Num
0 1 2017-07-18 1
1 2 2017-10-17 14
2 3 2017-08-20 6
3 4 2017-09-05 8
4 5 2017-08-20 6
5 6 2017-11-08 17
6 7 2017-09-17 10
7 8 2017-11-10 18
8 9 2017-08-14 5
9 10 2017-08-24 7
答案 1 :(得分:2)
IIUC
(df.invoiceDate-pd.to_datetime('2017-07-13')).dt.days//7+1
Out[352]:
0 1
1 14
2 6
3 8
4 6
5 17
6 10
7 18
8 5
9 7
Name: invoiceDate, dtype: int64
答案 2 :(得分:1)
您是否正在寻找类似的东西?
using (SqlDataReader oReader = command.ExecuteReader())
{
while (oReader.Read())
{
if (oReader["comments1"].ToString() == "0")
{
MessageBox.Show("CHECK THE COMMENTS AND THE GIVEN VALUE");
;
}
else
{
MessageBox.Show("Inserted");
ClearTextBoxes(this);
button2.Enabled = false;
}
}
输出:
df = pd.DataFrame()
df['ID'] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
df['InvDate'] = ['2017-07-18', '2017-10-17', '2017-08-20', '2017-09-05', '2017-08-20', '2017-11-08', '2017-09-17', '2017-11-10', '2017-08-14', '2017-08-24']
df['InvDate'] = pd.to_datetime(df['InvDate'])
df['WeekNum'] = df['InvDate'].dt.to_period('W').dt.week
df['WeekNum'] = df['WeekNum'] - df['WeekNum'][0] + 1