我需要检查一个数据框的“CP”列内的值,而我的数据框是由“中心”列分组的,是否相互抵消。
下面是一个例子:样品:
| 中心|CP|
| --------------|--------------|
| 3N7D|10个|
| 3N1F|二|
| 公司简介|-9|
| 3N7D|-1|
| 3N7D|-10|
| 8D92|一百九十八|
| 3N7D|-10|
| 公司简介|二|
| 8D92|一百九十五|
| 8D92|-3|
例外结果:
| 中心|CP|取消|
| --------------|--------------|--------------|
| 3N7D|10个|取消|
| 3N1F|二||
| 公司简介|-9||
| 3N7D|-1||
| 3N7D|-10|取消|
| 8D92|一百九十八|(不取消-195和-3,因为只有当有1个值取消时才需要取消,例如一次取消-198)|
| 3N7D|-10|(未取消,因为仅有的10个已取消)|
| 公司简介|二||
| 8D92|一百九十五||
| 8D92|-3||
以下是我尝试的:
grouped_df = df.groupby("Centre")
for name, group in grouped_df:
cp_values = group["CP"].values
for i in range(len(cp_values)):
for j in range(i+1, len(cp_values)):
if cp_values[i] == -cp_values[j]:
print("i = ",i)
print("j = ",j)
print("CP = ",cp_values[i])
print("CP2 = ",cp_values[j])
谢谢你的帮助。
1条答案
按热度按时间nkhmeac61#
您可以使用自定义的
pivot
来识别一个数字与它的负对应部分(通过numpy.sign
获得)的匹配。您需要使用groupby.cumcount
对pivot
执行重复数据消除:输出:
中间体
tmp
: