Python/Pandas传输dataframe的格式

标签 python pandas dataframe

我有一个 python/pandas 数据框有两列:(SHEET 列是列表)

    VNAME   SHEET
0   atnpi   [HSP, HHA, HO_, INP]
1   atupi   [HSP, HHA, INP]
2   carnm   [HB_]
3   clmid   [HSP, HHA, HB_, HO_, INP]
4   clseq   [HSP, HHA, HO_, INP]

我想将其传输到像这样的数据框

    VNAME   HSP    HHA   HB_   HO_  INP 
0   atnpi   TRUE   TRUE        TRUE TRUE
1   atupi   TRUE   TRUE             TRUE
2   carnm                TRUE
3   clmid   TRUE   TRUE  TRUE  TRUE TRUE
4   clseq   TRUE   TRUE        TRUE TRUE

最佳答案

执行此操作的一种方法如下:

df1 = df1.set_index('VNAME')

(df1['SHEET'].apply(pd.Series).stack()
            .reset_index(1, drop=True)
            .to_frame().assign(key=True)
            .set_index(0,append=True)['key']
            .unstack()
            .fillna('')
            .rename_axis(None,1)
            .reset_index())

输出:

   VNAME   HB_   HHA   HO_   HSP   INP
0  atnpi        True  True  True  True
1  atupi        True        True  True
2  carnm  True                        
3  clmid  True  True  True  True  True
4  clseq        True  True  True  True

或获取字符串“TRUE”

(df1['SHEET'].apply(pd.Series).stack()
                  .reset_index(1, drop=True)
                  .to_frame().assign(key='TRUE')
                  .set_index(0,append=True)['key']
                  .unstack().fillna('')
                  .rename_axis(None,1)
                  .reset_index())

输出:

   VNAME   HB_   HHA   HO_   HSP   INP
0  atnpi        TRUE  TRUE  TRUE  TRUE
1  atupi        TRUE        TRUE  TRUE
2  carnm  TRUE                        
3  clmid  TRUE  TRUE  TRUE  TRUE  TRUE
4  clseq        TRUE  TRUE  TRUE  TRUE

选项2

df1 = df1.set_index('VNAME')
df2 = df1['SHEET'].apply(pd.Series).stack().reset_index(name='SHEET').drop('level_1', axis=1)
pd.crosstab(df2.VNAME, df2.SHEET).astype(bool).replace(False,'').reset_index().rename_axis(None,1)

输出:

   VNAME   HB_   HHA   HO_   HSP   INP
0  atnpi        True  True  True  True
1  atupi        True        True  True
2  carnm  True                        
3  clmid  True  True  True  True  True
4  clseq        True  True  True  True

关于Python/Pandas传输dataframe的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063016/

相关文章:

Python - 数据框的维度

R:使用 RLE 计算跨列的连续相同值

python - 使用 f 字符串作为模板

python - Python 中有什么特殊的方法来处理 AttributeError?

python - Python 中的实时倒计时器

python - 加快在 Pandas 数据框中搜索最近的上限和下限值

python - 使用 Pandas 迭代 CSV 行,执行 Selenium 操作

python - 在 Pandas 数据框中从左到上移动单元格

python - 根据条件迭代 Pandas 列

python - 在其他列定义的窗口内累积应用