在数据框中添加一列,以对现有列的不同行执行不同的操作

时间:2020-01-15 05:36:30

标签: python pandas dataframe duplicates mean

FOOD_ID   SAMPLE_NO   ELEMENT1   ELEMENT2   ELEMENT3
 F110       A1          0.4        0.2        0.1
 F110       A2          0.6        0.1        0.3
 F110       B1          0.4        0.3        0.7
 F110       B2          0.5        0.6        0.9
 F110       C1          0.5        0.3        0.4
 F110       C2          0.6        0.2        0.6
 F110       C3          0.1        0.1        0.5
 F120       B1          0.4        0.2        0.2
 F120       B2          0.5        0.2        0.5
 F120       B3          0.7        0.3        0.8
 F120       B4          0.7        0.7        0.9
 F120       B5          0.2        0.9        0.1

我的数据如上所述。我想添加一列,以给出食品ID的元素1,2,3的平均值。 如果提供了样本C,则平均值将仅是C样本的平均值;如果不存在C样本,则平均值将仅是B样本的最新值。

对于食品,存在f110 C样品,这就是为什么平均值将为C样品的平均值。 对于食品f120中的C样品不存在,这就是为什么B样品B5的平均值要最近。

我最终想要的数据框如下所示...

FOOD_ID   ELEMENT1_AVG          ELEMENT2_AVG       ELEMENT3_AVG
F110     (0.5+0.6+0.1)/3=0.4  (0.3+0.2+0.1)=0.2  (0.4+0.6+0.5)=0.5
F120         0.2                    0.9               0.1

需要帮助。 预先感谢。

1 个答案:

答案 0 :(得分:0)

对于Series.str.startswith和{{,每组最后def remove(self, key): pair = LinkedPair(key,None) index = self._hash_mod(pair) pointer = self.storage[index] prev = None while pointer: if pointer.key == pair.key: if prev is None: #at the beginning of the linked list, set the head to equal the next value print(self.storage[index] == pointer) #true self.storage[index] = self.storage[index].next pointer = pointer.next # pointer = pointer.next break # self.display(pointer,prev,' pointer == pair') prev.next = pointer.next del pointer break else: prev = pointer pointer = pointer.next # self.display(pointer,prev,' post shifting') # self.storage[index] = self.storage[index].next return -1 个不存在的C,您可以使用GroupBy.transform得到BGroupBy.any的行掩码。 3}}到C并通过m反转掩码,与~链接并通过b过滤,然后通过Series.duplicated得到最后一个df[(~m & b)]反转B

然后使用~Series.combine_first过滤原始DataFrame并汇总c,因为mean每组只有一行,它返回相同的值:

B