我有以下数据帧:
dataset = {
'String': ["ABCDEF","HIJABC","ABCHIJ","DEFABC"],
'Bool':[True,True,False,False],
'Number':[10,20,40,50]}
df = pd.DataFrame(dataset)
String Bool Number
0 ABCDEF True 10
1 HIJABC True 20
2 ABCHIJ False 40
3 DEFABC False 50
我想将列Number
中Bool
是False
的行与列Bool
是True
的行相加:
如果一行的String的倒数不等于该行的String,则可以将行匹配并相加。
在这种情况下,
ABCHIJ
(其中bool
是False
(不等于ABCDEF
的倒数,所以我对数字求和:10+40。其中
Bool
为True
的HIJABC
与其中Bool
为False
的DEFABC
相加,结果为70
预期输出:
String Bool Number
0 ABCDEF True 50
1 HIJABC True 70
2 ABCHIJ False 40
3 DEFABC False 50
我希望我的解释足够好,有没有办法达到上述结果?
一种方法是这样的:
df_true = df[df['Bool'] == True]
df_false = df[df['Bool'] == False]
for i in df_false['String']:
idx = df_true[df_true['String'] != (i[3:] + i[:3]) ].index[0]
current_num = df.loc[df.index == idx, 'Number'].values[0]
added_num = df[df['String'] == i]['Number'].values[0]
df.loc[df.index == idx, 'Number'] = current_num + added_num
我希望它能帮助