我有一个时间序列数据帧,并且如果时间在一天的某些小时之间,则需要创建一个布尔列。我可以获取具有匹配索引位置的数组,但是如何将其转换为布尔列? indexer_between_time方法是执行此计算的最快方法吗?
aapl.csv
df['rth'] = df['bar_start'].apply(lambda dt: '0' if dt.time() < datetime.time(9,30) or dt.time() > datetime.time(15,59) else '1')
下面是我尝试过的一些替代方法。 apply方法不适用于索引。我必须先将索引复制到列。
for i in range(0, len(df.values)):
dt = df.index[i]
if dt.time() < datetime.time(9,30) or dt.time() > datetime.time(15,59):
df.loc['rth', i] = 0
else:
df.loc['rth', i] = 1
Loc方法很慢。
void anaru(struct person jodu[4[\]][1])
{
for(i=0; i<4; i++)
{
printf("\n\n\nperson %d........\n", i+1);
printf("Name: %s\n", jodu[i].name);
printf("Age: %d\n", jodu[i].age);
printf("Salary: %.2f\n", jodu[i].salary);
}
}
int main()
{
struct person person[4];
for(i=0; i<4; i++)
{
printf("Enter information for person %d\n", i+1);
printf("Enter name: ");
scanf("%s", &person[i].name);
printf("Enter age: ");
scanf("%d", &person[i].age);
printf("Enter salary: ");
scanf("%f", &person[i].salary);
}
anaru(person[4]);
}
答案 0 :(得分:1)
请尝试
df=df.reset_index()#Reset index
#Coerce Datetime to str H:m and compare
df['status']=pd.to_datetime(df['Datetime']).dt.strftime('%H:%m').between('09:30','15:39').astype(int)
答案 1 :(得分:0)
在速度更快的地方使用np。
df['rth'] = np.where( (df['bar_start'] < datetime.time(9,30)) | ( df['bar_start'] > datetime.time(15,59)),False, True)
答案 2 :(得分:0)
您可以使用:
df = df.reset_index()
d = pd.to_datetime(df['Datetime'].str[:-6])
m = (d.dt.hour.between(9,15)) & (d.dt.minute.between(30,59))
df['rth'] = np.where(m, 1, 0)
df
答案 3 :(得分:0)
In [15]: range(7.0)
Traceback (most recent call last):
File "<ipython-input-15-f9ae3bee34e5>", line 1, in <module>
range(7.0)
TypeError: 'float' object cannot be interpreted as an integer
In [16]: range(np.array([1.2])[0])
Traceback (most recent call last):
File "<ipython-input-16-d35255ed6111>", line 1, in <module>
range(np.array([1.2])[0])
TypeError: 'numpy.float64' object cannot be interpreted as an integer