Pandas 熊猫-在两个索引之间切片

Pandas 熊猫-在两个索引之间切片,pandas,slice,Pandas,Slice,我需要用tensorflow处理数据进行分类。因此,我需要为机器中处理的每个单元创建数据帧。机器持续写入过程数据,并在装置进出机器时写入数据 “uid\u in”中的值表示机器输入了记录的编号,“uid\u out”表示机器离开了机器 [...] time uhz1 uhz2 lhz1 lh2 uid_in uid_out 5 08:05:00 201 200 101 100 1.0 NaN #Unit1 enters the ma

我需要用tensorflow处理数据进行分类。因此,我需要为机器中处理的每个单元创建数据帧。机器持续写入过程数据,并在装置进出机器时写入数据

“uid\u in”中的值表示机器输入了记录的编号,“uid\u out”表示机器离开了机器

[...]
        time  uhz1  uhz2  lhz1  lh2  uid_in  uid_out
5   08:05:00   201   200   101  100     1.0      NaN #Unit1 enters the machine
6   08:06:00   201   200    99  101     2.0      NaN
[...]
14  08:14:00   199   199    99  101    10.0      NaN
15  08:15:00   201   201   100  100    11.0      1.0 #Unit1 leaves the machine
[...]
我需要为机器的每个单元进程创建这样的数据帧

[...]
        time  uhz1  uhz2  lhz1  lh2  uid_in  uid_out
5   08:05:00   201   200   101  100     1.0      NaN #Unit1 enters the machine
6   08:06:00   201   200    99  101     2.0      NaN
[...]
14  08:14:00   199   199    99  101    10.0      NaN
15  08:15:00   201   201   100  100    11.0      1.0 #Unit1 leaves the machine
[...]
如何为每个单元自动创建数据帧df.loc[输入:离开]

当我试图传递DataFrame.index时,它在df.loc中不起作用

start = df[df.uid_in.isin([123])]
end = df[df.uid_out.isin([123])]
unit1_df = df.loc[start:end]

我觉得你很接近。我修改了您的陈述,并选择了
start
end
的开始和结束索引,如Ian所示

"""        time  uhz1  uhz2  lhz1  lh2  uid_in  uid_out
5   08:05:00   201   200   101  100     1.0      NaN
6   08:06:00   201   200    99  101     2.0      NaN
14  08:14:00   199   199    99  101    10.0      NaN
15  08:15:00   201   201   100  100    11.0      1.0
"""

import pandas as pd

df = pd.read_clipboard()

start = df.uid_in.eq(1.0).index[0]
end = df.uid_out.eq(1.0).index[0]

unit1_df = df.loc[start:end]
unit1_df
输出:

    time    uhz1    uhz2    lhz1    lh2     uid_in  uid_out
5   08:05:00    201     200     101     100     1.0     NaN
6   08:06:00    201     200     99      101     2.0     NaN
14  08:14:00    199     199     99      101     10.0    NaN
15  08:15:00    201     201     100     100     11.0    1.0
一艘班轮:

unit1_df = df.loc[df.uid_in.eq(1.0).index[0]:df.uid_out.eq(1.0).index[0]]

我觉得你很接近。我修改了您的陈述,并选择了
start
end
的开始和结束索引,如Ian所示

"""        time  uhz1  uhz2  lhz1  lh2  uid_in  uid_out
5   08:05:00   201   200   101  100     1.0      NaN
6   08:06:00   201   200    99  101     2.0      NaN
14  08:14:00   199   199    99  101    10.0      NaN
15  08:15:00   201   201   100  100    11.0      1.0
"""

import pandas as pd

df = pd.read_clipboard()

start = df.uid_in.eq(1.0).index[0]
end = df.uid_out.eq(1.0).index[0]

unit1_df = df.loc[start:end]
unit1_df
输出:

    time    uhz1    uhz2    lhz1    lh2     uid_in  uid_out
5   08:05:00    201     200     101     100     1.0     NaN
6   08:06:00    201     200     99      101     2.0     NaN
14  08:14:00    199     199     99      101     10.0    NaN
15  08:15:00    201     201     100     100     11.0    1.0
一艘班轮:

unit1_df = df.loc[df.uid_in.eq(1.0).index[0]:df.uid_out.eq(1.0).index[0]]

你的代码几乎成功了

原始数据帧:

        time  uhz1  uhz2  lhz1  lh2  uid_in  uid_out
0   08:00:00   201   199   100  100     NaN      NaN
1   08:01:00   199   199   100   99     NaN      NaN
[...]
5   08:05:00   201   200   101  100     1.0      NaN
[...]
55  08:55:00   241   241   140  140     NaN     41.0
[...]
58  08:58:00   244   244   143  143     NaN      NaN
59  08:59:00   245   245   144  144     NaN      NaN
新代码:

start = df[df.uid_in.eq(1.0)].index[0]
end = df[df.uid_out.eq(1.0)].index[0]
unit1_df = df.loc[start:end]
print(unit1_df)
输出

        time  uhz1  uhz2  lhz1  lh2  uid_in  uid_out
5   08:05:00   201   200   101  100     1.0      NaN
6   08:06:00   201   200    99  101     2.0      NaN
[...]
14  08:14:00   199   199    99  101    10.0      NaN
15  08:15:00   201   201   100  100    11.0      1.0

你的代码几乎成功了

原始数据帧:

        time  uhz1  uhz2  lhz1  lh2  uid_in  uid_out
0   08:00:00   201   199   100  100     NaN      NaN
1   08:01:00   199   199   100   99     NaN      NaN
[...]
5   08:05:00   201   200   101  100     1.0      NaN
[...]
55  08:55:00   241   241   140  140     NaN     41.0
[...]
58  08:58:00   244   244   143  143     NaN      NaN
59  08:59:00   245   245   144  144     NaN      NaN
新代码:

start = df[df.uid_in.eq(1.0)].index[0]
end = df[df.uid_out.eq(1.0)].index[0]
unit1_df = df.loc[start:end]
print(unit1_df)
输出

        time  uhz1  uhz2  lhz1  lh2  uid_in  uid_out
5   08:05:00   201   200   101  100     1.0      NaN
6   08:06:00   201   200    99  101     2.0      NaN
[...]
14  08:14:00   199   199    99  101    10.0      NaN
15  08:15:00   201   201   100  100    11.0      1.0

start
end
pd.DataFrame
s,因此它们不会在
df.loc
中工作。您必须将
.index
放在它们的末尾,如下所示:
start.index
。您也可以只说
start=df.uid\u in.isin([123])
end=df.uid\u out.isin([123])
。现在我的问题是:
start
end
的索引是一行吗?还是多重?如果有多个数据帧,则该片将无法工作
start
end
pd.DataFrame
s,因此它们将无法在
df.loc
中工作。您必须将
.index
放在它们的末尾,如下所示:
start.index
。您也可以只说
start=df.uid\u in.isin([123])
end=df.uid\u out.isin([123])
。现在我的问题是:
start
end
的索引是一行吗?还是多重?如果是多个,那么这个片段将不起作用。这将返回我机器上的整个数据帧。把代码改了一点,然后把我的解决方案贴出来。明白了。。。希望至少能有所帮助!我改变了我的soln以匹配你的soln。这将返回我机器上的整个数据帧。把代码改了一点,然后把我的解决方案贴出来。明白了。。。希望至少能有所帮助!我改变了我的soln以匹配你的soln。干杯