从一个数据帧中只读数值,然后从这些值创建另一个数据帧

2024-09-27 00:15:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我已将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

然后我编写了这段代码来相互比较相应的reqid,然后删除reqid列:

    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

现在,我想将这些数据写入一个单独的数据框中,其中只存在数值,并删除空值或空值。数据帧应如下所示:

enter image description here

如果有人能帮助我,我将不胜感激。你知道吗


Tags: columns数据inindexnpruleexceldf1
1条回答
网友
1楼 · 发布于 2024-09-27 00:15:00

使用justify函数,然后通过how='all'参数^{}仅删除NaN的行:

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

另一种解决方案:

df8 = df8.apply(lambda x: pd.Series(x.dropna().values))
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

相关问题 更多 >

    热门问题