遍历熊猫数据框的组时,如何保持其原始索引?

时间:2019-07-18 14:56:59

标签: python pandas dataframe indices

我想比较我的数据集的两个列表,一个是从每个组的熊猫数据框中读取的(每个组“ list1”),另一个是从每个组的另一个文件中读取的(每个组“ list2”)。这两个列表都包含时间点。如果“ list2”包含的时间点也在“ list1”中,则我想在另一个列表“ list_ind”中收集“ list1”的索引。

由于我遍历数据框的各组并为每个组获取新的“ list1”,所以我想知道是否存在一种简单的方法来将原始熊猫数据框的索引存储在“ list_ind”中(我需要它们将每个组的不同时间点排序为“治疗”(list_ind)或“不治疗”(list_other_ind))。

到目前为止,我确实知道如何获取每个组的所有索引,只是我需要以某种方式将它们转换回原始数据帧索引。

我的数据看起来像这样:

df = pd.read_csv(filename)



            ID  ...                        time
0           123  ...                          5
1           123  ...                         15
2           123  ...                         18
3           123  ...                         34
4           123  ...                         78
5           456  ...                          9
6           456  ...                         17
7           456  ...                         19 
8           456  ...                         36
9           456  ...                         74
10          456  ...                        102
11          789  ...                         19
12          789  ...                         26
13          789  ...                         32

我的第二个列表基本上只包含整数作为数据帧的“时间”列。有些值将与“时间”列中的值相等,有些将不相等,并且长度可能有所不同。例如

ID 123的文件包含:

10
15
20
34

ID 456文件:

10
17
74

ID为789的文件:

19
21
25
26
27

我使用np.groupy在块123、456、789之间进行分隔。然后遍历该组:

groupDF = list(df.groupby('ID'))
for name, group in groupDF:      #name prints 123 in the first loop etc
     list1=np.append(list1, list(group['time'])) ### IS THE ERROR HERE?

     ## now I read the data for list2
     data = csv.reader(csvfile)
     for row in data:
         list2 = np.append(list2, row[1])

现在,我比较list1和list2。如果有共享库,我想将它们的索引收集到一个新列表中。因此,我计算了这些值之间的差异diff(因为我需要将其调整以用于其他目的,所以我知道还有其他比较方法)

 for item in list1:
     for item2 in list2:
          diff = abs(item -item2)   
          if diff = 0:
             list_ind = np.append(list_ind, np.where(list1 == item))
             treatment = np.uniqe(list_ind)
          else:
             list_other_ind = np.append(list_other_ind, np.where(list1 == item))
             notreatment = np.unique(list_other_ind)             

预期结果将是:

treatment = [1,3,6,9,11,12]
notreatment = [0,2,4,5,7,8,10,13]

处理将是列表1出现在列表2中的索引,而没有处理将是列表1没有出现在列表2中的索引。 因此,这些列表可以相互补充!

但是,我得到的是索引的重叠和一些数字的重复,因此我认为是由于这样的事实,我收集了list1中的时间点,从而失去了数据帧的原始索引?

0 个答案:

没有答案