繁体   English   中英

Pandas dataframe groupby删除列

[英]Pandas dataframe groupby remove column

我偶然发现了 dataframe 的问题。 我使用此代码段生成 dataframe 之后,我根据'chr' Column按 dataframe 分组。

import pandas as pd

DF = pd.DataFrame({'chr':["chr3","chr3","chr7","chr6","chr1", "chr7"],'y':[10,20,30,40,50,90],'ds': 
     ['2018-01-01', '2018-01-02', '2018-01-01', '2018-01-01', '2018-01-01', '2018-12-01']})

DF.head(n=10)

    chr     y       ds
0   chr3    10  2018-01-01
1   chr3    20  2018-01-02
2   chr7    30  2018-01-01
3   chr6    40  2018-01-01
4   chr1    50  2018-01-01
5   chr7    90  2018-12-01


ans = [pd.DataFrame(y) for x, y in DF.groupby('chr', as_index=False)]
ans

[    chr   y          ds
4  chr1  50  2018-01-01,
     chr   y          ds
0  chr3  10  2018-01-01
1  chr3  20  2018-01-02,
     chr   y          ds
3  chr6  40  2018-01-01,
     chr   y          ds
2  chr7  30  2018-01-01
5  chr7  90  2018-12-01]

请注意,一旦我使用groupby ,我会将结果存储在列表中。 结果,我列出了基于chr的嵌套dataframe列表。 如果我需要从我的列表中删除每个子 dataframe 中的 chr 列,该怎么办? 我只需要从列表中删除每个 dataframe 中的chr 请注意,解决方案应该在更大的列表大小上进行扩展。

如果只有两列,您可以在创建原始列表时执行此操作:

ans = [pd.DataFrame(y, columns=DF.columns.difference(['chr'])) for x, y in DF.groupby('chr', as_index=False)]    

或者,从每个 subDf 显式删除chr

ans = [pd.DataFrame(y).drop('chr', axis=1) for x, y in DF.groupby('chr', as_index=False)]    

如果在创建原始列表时无法删除(如上所示),您可以像这样更新它:

# Create `ans` as you're currently doing:
ans = [pd.DataFrame(y) for x, y in DF.groupby('chr', as_index=False)] 
#
# some processing on `ans`
#
# Now update `ans` by dropping "chr" from each subDf
ans = [df.drop('chr', axis=1) for df in ans]

这将在保存期间删除列chr

ans = [pd.DataFrame(y).drop('chr', axis=1) for x, y in DF.groupby('chr', as_index=False)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM