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
需要帮助。 预先感谢。
答案 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
得到B
到GroupBy.any
的行掩码。 3}}到C
并通过m
反转掩码,与~
链接并通过b
过滤,然后通过Series.duplicated
得到最后一个df[(~m & b)]
反转B
。
然后使用~
和Series.combine_first
过滤原始DataFrame
并汇总c
,因为mean
每组只有一行,它返回相同的值:>
B