根据列条件将行添加到熊猫数据框

时间:2019-08-10 17:27:26

标签: python pandas dataframe

我有一个熊猫数据框,其中缺少一些行,我可以通过评估数据框的最后一列cycle来判断。该列应遵循一个从0-127重复并直到数据帧结束的循环。我可以说,例如,如果此列上的值从36跳到38,则表示缺少行,这意味着缺少第37行。这是一个例子:

df = pd.read_csv('Acc12019-08-08T21_52_46.3175552+01_00.csv')

      Command  RegisterAddress  Timestamp  accx  ...  magx  magy  magz  cycle
27          3               34   115.0948   -83  ...  79.0  80.0 -78.0   35.0
28          3               34   115.1004   -34  ...  79.0  80.0 -78.0   36.0
29          3               34   115.1048    36  ...  79.0  80.0 -80.0   38.0
      ...              ...        ...   ...  ...   ...   ...   ...    ...
3731        3               34   140.0191  1238  ...  44.0 -90.0 -39.0   30.0
3732        3               34   140.0235  1243  ...  44.0 -90.0 -38.0   31.0
3733        3               34   140.0293  1368  ...  43.0 -90.0 -35.0   33.0

我想做的是在不满足此条件的情况下添加NaN行,例如,如果cycle中缺少37个,则添加NaN行,如下所示:

27          3               34   115.0948   -83  ...  79.0  80.0 -78.0   35.0
28          3               34   115.1004   -34  ...  79.0  80.0 -78.0   36.0
          NaN              NaN        NaN   NaN        NaN   NaN   NaN   37.0
29          3               34   115.1048    36  ...  79.0  80.0 -80.0   38.0

缺少的行是随机的,并且可能发生在任何cycle位置,因此我认为第一件事就是检查不满足0-127 cycle条件的地方-这就是我很难做。

我试图寻找在列表like this上查找缺失数字的方法,但到目前为止,在我的数据帧上实现它没有成功。

某些帮助或指导将不胜感激!

1 个答案:

答案 0 :(得分:1)

一种方法是使用set查找丢失的行; appendsort_valuesreset_index,将它们添加到原始数据框中。

# assume `lst` is a list containing all possible `cycle` values
lst = [35, 36, 37, 38, 39, 40]
missing = pd.DataFrame({'cycle': list(set(df['cycle']) ^ set(lst))})
# missing.head()
    cycle
0   37
1   39
2   40
df.append(missing).sort_values(['cycle']).reset_index(drop=True)

输出:

enter image description here


发布了图片,因为to_clipboard()的输出都被弄乱了。