【问题标题】:Selecting rows in Pandas Panel在 Pandas 面板中选择行
【发布时间】:2015-07-02 03:48:54
【问题描述】:

有没有办法从 Pandas 面板中选择行?

例如,在以下示例中,我是否可以跨数据帧获取 Job == "B" 的所有行?在常规数据框中,我知道我可以使用

df1[df1["job"] == "A"]

但我不确定如何在没有循环的 Pandas 面板中执行此操作。

df1 = pd.DataFrame({"job":["A", "B", "C", "D"],"date":["DateA1", "DateB1", "DateC1", "DateD1"]})
df2 = pd.DataFrame({"job":["B", "C", "D", "E"],"date":[ "DateB2", "DateC2", "DateD2", "DateE2"]})
p = pd.Panel({"df1":df1, "df2":df2})

我的问题可能与这个问题重复

Boolean Masking in Panels

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用 2D df 而不是 3D 面板可能更方便(至少对我而言 :-))。

    df1 = pd.DataFrame({"job":["A", "B", "C", "D"],"date":["DateA1", "DateB1", "DateC1", "DateD1"]})
    df2 = pd.DataFrame({"job":["B", "C", "D", "E"],"date":[ "DateB2", "DateC2", "DateD2", "DateE2"]})
    p = pd.Panel({"df1":df1, "df2":df2})
    
    frame = p.to_frame()
    
    Out[12]: 
                    df1     df2
    major minor                
    0     date   DateA1  DateB2
          job         A       B
    1     date   DateB1  DateC2
          job         B       C
    2     date   DateC1  DateD2
          job         C       D
    3     date   DateD1  DateE2
          job         D       E
    
    
    res = frame.unstack('minor').stack(level=0)
    
    Out[13]: 
    minor        date job
    major                
    0     df1  DateA1   A
          df2  DateB2   B
    1     df1  DateB1   B
          df2  DateC2   C
    2     df1  DateC1   C
          df2  DateD2   D
    3     df1  DateD1   D
          df2  DateE2   E
    
    
    res.loc[res['job'] == 'B', :]
    
    Out[14]: 
    minor        date job
    major                
    0     df2  DateB2   B
    1     df1  DateB1   B
    

    【讨论】:

    • Jianxun,我同意你的观点,但我试图强迫自己了解 Panels,因为它们的实施必须有原因(或者我认为?)这带来了更广泛的问题我这就是为什么在 MultiIndex 上使用面板?我真的不太了解面板,但我正在努力寻找好处。有什么想法吗?
    • @canyon289 我对Panel 没有太多经验。我个人更喜欢堆叠的dataframe 而不是Panel 是堆叠的dataframe 允许我通过轻松打印出中间结果来进行交互式分析,而在panel 中,您无法在终端中同时可视化所有组件,因为它的 3D 特性。
    猜你喜欢
    • 2012-07-28
    • 2019-05-24
    • 2013-11-10
    • 1970-01-01
    • 2018-09-27
    • 2022-06-15
    相关资源
    最近更新 更多