【问题标题】:Selecting all Columns based on Row value in a Dataframe Pandas根据 Dataframe Pandas 中的行值选择所有列
【发布时间】:2016-09-09 15:40:38
【问题描述】:

我有一个类似的 df1,有数千列和数千行。我会 喜欢根据第 1 行单元格中的条件进行随机抽样 (date0) 基本上我想过滤列并返回 它们和基于条件的日期时间索引,如果单元格在 date0 行等于 V1,然后对 cell==V2 进行相同的采样,然后 V3..等

然后我会将所有这些样本连接成一个单数 数据框。我想确保我返回原始日期时间索引 而不是通用索引 0,1,2,3...

        abc   def   ghi   jkl   mno    pqr
date0   'V1'  'V1'  'V2'  'V3'  'V0'  'V1'
  
date1     2     5    6     3      2    1

date2     3     1    1     3      5    6

date3     4     4    2     7      8    0

到目前为止,我已经尝试过过滤,但它不起作用 数据集1=Dataset.ix[:,(random.sample(list(Dataset.iloc[0,:]=='V2'), 4))].copy() 4 只是要返回的列数的任意数字。 然后我需要连接。

谢谢!

【问题讨论】:

    标签: python pandas random dataframe


    【解决方案1】:

    您希望将date0 作为列索引的一部分。

    df1 = df.T.set_index('date0', append=True).T
    df1
    

    那你就可以用xs取横截面了

    df1.xs('V1', axis=1, level=1)
    


    对评论的回应
    这适用于在不知道行索引值的情况下使用第一行

    df1 = df.iloc[1:].T.set_index(df.iloc[0], append=True).T
    
    df1.xs('V1', axis=1, level=1)
    

    对第二条评论的回应
    iloc[1:] 旨在明确删除第一行。如果您想保留它,请不要包含该部分。

    df1 = df.T.set_index(df.iloc[0], append=True).T
    df1
    

    df1.xs('V1', axis=1, level=1)
    

    【讨论】:

    • 感谢 PRSquared!如果我不知道刚刚附加的第一指数的名称怎么办?有没有办法得到它?
    • 嗨 piRSquared。唯一的事情是当我们进行转置时我丢失了 date0 索引。理想情况下,我想取回它,因为过滤应该显示 date0 行值。列 date0 的另一个转置会这样做吗?此外,我还试图在之后将所有选定的、过滤的交叉部分连接在一起。
    • 也许使用 'index.tolist()[0]' 会有所帮助?
    • @Pythus 这很容易解决。等我回到电脑上更新帖子
    • 哦,我明白了,谢谢
    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 2018-09-04
    • 2021-10-14
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 2016-06-19
    • 2015-10-09
    相关资源
    最近更新 更多