仅从一个数据框读取数值,并从这些值创建另一个数据框

时间:2019-03-13 12:45:15

标签: python pandas csv dataframe

我已经将一个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)

结果如下:

enter image description here

然后我将其移置,数据如下所示:

enter image description here

现在,我想将此数据写入一个单独的数据框中,其中仅存在数字值,并且删除空值或null值。数据框应如下所示:

enter image description here

如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 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