我刚刚开始学习熊猫,所以我才刚刚起步。 :)
情况:
我有两个数据框(df1和df2)。
df1包含一台机器的多个传感器数据。传感器每分钟发送一次数据。我以日期时间格式设置了df1的索引(这实际上是传感器发送数据的日期和时间)。
df2包含一个生产单位的数据,即单位ID号(在数据帧中被称为“ Sarzs”)和过程开始和结束的日期时间以及该特定生产单位的输出质量。该数据框不包含与该特定时间相关的生产单位的数据(在该数据框中,您可以看到“ Sarzs_no”列在此阶段设置为NaN)。生产单元的开始和停止日期和时间存储在“开始”和“停止”列中,并且采用日期时间格式。
问题:
我想遍历df1的行和df2的行,并检查它们是否在df2的“开始”和“停止”时间之内(或之间),如果此语句为true,则udpdate df1 ['Sarzs_no ']的价值
df2 ['Output']值。
到目前为止的进展::
到目前为止,我已经编写了以下代码:
for i in range (0, len(df2.index)):
for j in range(0, len(df1.index)):
print (df1.index)
我基本上有两个问题:
预先感谢您的帮助。
答案 0 :(得分:1)
使用包含时间戳记作为日期时间对象的数据帧,您可以使用以下内容:
#Loop over the dataframe containing start and end timestamps
for index,row in df2.iterrows():
#Create a boolean mask to filter data
mask = (df1.index > row['Start']) & (df1.index < row['Stop'])
df1.loc[mask,'Sarzs_no'] = row['Output']
对于包含开始和结束时间戳记的数据框的每一行,这将使与掩码条件匹配的行具有该行的“输出”标签
loc函数返回符合条件的行的索引,而iterrows函数创建一个迭代器,该迭代器逐行遍历数据框
编辑
有了日期时间索引,就可以使用:
df1[row['Start']:row['Stop']]
代替.loc()获取需要更新的行