我有一个样本数据集,它类似于下面定义的数据集。
dict_1 = {'Id' : [1, 1, 2, 2, 3, 4],
'boolean_val' : [True, False, True, False, True, False],
"sal" : [1000, 2000, 1500, 2500, 3500, 4500]}
test = pd.DataFrame(dict_1)
test.head(10)
我必须根据给定条件在测试 Dataframe 中创建2个新列,即output_True和output_False:
a)如果Id[0] == Id[1]且boolean_瓦尔=真,则将sal[0](因为这是boolean_val =真时的值)放入output_True中,否则为“NA”.
B)如果Id[0] == Id[1]且boolean_瓦尔=假,则将sal[1](因为这是当boolean_val =假时的值)放入output_False中,否则为“NA”.
c)如果Id[0] 1= Id[1] & boolean_瓦尔== True,则将该行的sal值放入output_True,否则如果Id[0] 1= Id[1] & boolean_val == False,则将该行的sal值放入output_False。
如果我没有正确框我的问题,然后请检查下面的数据框输出,我希望我的输出类似于输出真和输出假如下所示。
dict_1 = {'Id' : [1, 1, 2, 2, 3, 4],
'boolean_val' : [True, False, True, False, True, False],
"sal" : [1000, 2000, 1500, 2500, 3500, 4500],
"output_True" : [1000, "NA", 1500, "NA", 3500, "NA"],
"output_False" : [2000, "NA", 2500, "NA", "NA", 4500]}
output_df = pd.DataFrame(dict_1)
output_df.head(10)
我试过使用np.where()& list解析,但是我的输出数据没有显示正确的值。有人能帮我吗?
2条答案
按热度按时间gc0ot86w1#
使用loc为布尔列赋值。对于第二个条件,可以使用
.shift()
并比较Id[0] == Id[1]值和基于此的sum:qxsslcnc2#
以下是获得所需输出的方法:
输出:
说明:
pivot()
创建中间 Dataframedf
,True
和False
列包含每个Id
对应的sal
值True
的boolean_val
列,除非给定行的True
列为NaN
Id, boolean_val
设置为df
的索引True
和False
列重命名为output_True
和output_False
,并交换它们的位置(以匹配所需的输出)join()
创建output_df
,它是test with added columns
输出_真and
输出_假'NaN
替换为字符串"NA"
,并将output_True
和output_False
中的sal
值从浮点型更改为整型。