我有一个作为数据框导入的 excel 文件。数据集如下所示:
rule_id reqid1 reqid2 reqid3 reqid4
53139 0 0 1 0
51181 1 1 1 0
50412 0 1 1 0
50356 0 0 1 0
50239 0 1 0 1
50238 1 1 1 0
50014 1 0 1 1
我必须相互比较 reqid 列。这是代码:
c1 = list(map(lambda a,b: a if a == b else 100*a , df.reqid1 , df.reqid2))
df['comp1'] = c1
c2 = list(map(lambda b,c: b if b == c else 100*b , df.reqid2 , df.reqid3))
df['comp2'] = c2
c3 = list(map(lambda c,d: c if c == d else 100*c , df.reqid3 , df.reqid4))
df['comp3'] = c3
comps = ['comp1' , 'comp2' , 'comp3']
df[comps] = df[comps].replace({0: np.nan})
基本上这段代码的作用是将 reqid1 与 reqid2 、 reqid2 与 reqid3 等进行比较。如果两列的值都为 0,则应在新创建的列中更新 0,如果两列的值都为 1,则应在新创建的列中更新 1。如果第一列有 0 并且下一列有 1 那么 , NaN 应该更新,如果第一列有 1 并且第二列有 0 ,那么 100 应该更新。我正在为最后一列使用另一个函数。基本上它的作用是如果最后一列(在本例中为 reqid4)的值为 1 ,则应在新列中更新 100 ,如果值为 0 ,则应更新 0 。这是代码:
def fun(df , col2):
df['last_comp'] = np.where((df.loc[: , col2] == 1) , 100 , 0)
return df
这是我得到的结果:
rule_id reqid1 reqid2 reqid3 reqid4 comp1 comp2 comp3 last_comp
53139 0 0 1 0 NaN NaN 100.0 0
51181 1 1 1 0 1.0 1.0 100.0 0
50412 0 1 1 0 NaN 1.0 100.0 0
50356 0 0 1 0 NaN NaN 100.0 0
50239 0 1 0 1 NaN 100.0 NaN 100.0
50238 1 1 1 0 1.0 1.0 100.0 0
50014 1 0 1 1 100.0 NaN 1.0 100.0
这段代码对我有用,但我有大数据集,这只是数据的一部分。我有 100 多列,每次都编写此代码对我来说是不可行的。我想自动化将一列与另一列进行比较的过程,但我不知道如何进行。如果你能帮助我,那就太好了。
慕田峪9158850
相关分类