我已经将一个excel导入到数据框中,它看起来像这样:
rule_id reqid1 reqid2 reqid3
50014 1.0 0.0 1.0
50238 0.0 1.0 0.0
50239 0.0 1.0 0.0
50356 0.0 0.0 1.0
50412 0.0 0.0 1.0
51181 0.0 1.0 0.0
53139 0.0 0.0 1.0
然后,我编写了这段代码,以相互比较对应的需求,然后删除需求列:
m = df1.eq(df1.shift(-1, axis=1))
arr1 = np.select([df1 ==0, m], [np.nan, 1], 1*100)
dft4 = pd.DataFrame(arr1, index=df1.index).rename(columns=lambda x: 'comp{}'.format(x+1))
dft5 = df1.join(dft4)
cols = [c for c in dft5.columns if 'reqid' in c]
df8 = dft5.drop(cols, axis=1)
结果如下:
然后我将其移置,数据如下所示:
现在,我想将此数据写入一个单独的数据框中,其中仅存在数字值,并且删除空值或null值。数据框应如下所示:
如果有人可以帮助我,我将不胜感激。
答案 0 :(得分:2)
使用justify函数,然后仅删除DataFrame.dropna
中带有参数NaN
的{{1}}行:
how='all'
df8 = dft5.drop(cols, axis=1).T
另一种熊猫解决方案:
df8 = pd.DataFrame(justify(df8.values,
invalid_val=np.nan,
axis=0,side='up'), columns=df8.columns).dropna(how='all')
print (df8)
rule_id 50014 50238 50239 50356 50412 51181 53139
0 100.0 100.0 100.0 100.0 100.0 100.0 100.0
1 100.0 NaN NaN NaN NaN NaN NaN