熊猫 - 两个索引之间的切片

时间:2018-01-11 16:36:14

标签: pandas slice

我需要使用tensorflow处理数据以进行分类。因此,我需要为在我的机器中处理的每个单元创建DataFrame。机器不断写入过程数据,并在设备进入和离开机器时写入。

'uid_in'中的值表示记录的数字输入机器的单位,'uid_out'表示单位离开机器。

我需要为机器的每个单元进程创建一个这样的DataFrame。

[...]
        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
[...]

如何自动为每个单元创建Dataframe df.loc [enter:leave]?

当我尝试传递DataFrame.index时,它在df.loc

中不起作用
start = df[df.uid_in.isin([123])]
end = df[df.uid_out.isin([123])]
unit1_df = df.loc[start:end]

2 个答案:

答案 0 :(得分:1)

我觉得你很亲密。我修改了你的陈述,并选择了startend的开始和结束索引,正如伊恩指出的那样。

"""        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]]

答案 1 :(得分:1)

您的代码几乎已经解决了!

原始DataFrame:

        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