【问题标题】:split a specific pandas dataframe into two lists将特定的 pandas 数据框拆分为两个列表
【发布时间】:2015-05-14 21:00:05
【问题描述】:

我有一个这样的熊猫数据框:

df = pd.DataFrame(data={'a': [True, True, False, True, True, False,False], 'b': range(7)} , index = range(7))

...(索引不重要)我想获得一个元组:

([[0, 1], [3, 4]], [[2],[5, 6]])

...或更一般地说,我想将 df 拆分为元组,其中第一个元素是 b 列中的值列表的列表,其中 a==True,第二个元素是...其中 a==False。列表中的顺序应与数据框中的顺序相匹配。 获得这个的最pythonic(或'pandastic')的方式是什么? 我对我的解决方案不满意。

【问题讨论】:

    标签: python list pandas split


    【解决方案1】:

    这是一个方法:

    df = pd.DataFrame(data={'a': [True, True, False, True, True, False,False], 'b': range(7)} , index = range(7))
    
    def splitOnDiscontinuities(elements):
        lists = [[]]
        lastE = None
        for e in elements:
            if lastE is None or e == lastE + 1:
                lists[-1].append(e)
            else:
                lists.append([e])
            lastE = e
        return lists
    
    def weirdThing(df, col1, col2):
        trueElements = splitOnDiscontinuities(list(df[col1][df[col2] == True]))
        falseElements = splitOnDiscontinuities(list(df[col1][df[col2] == False]))
        return (trueElements, falseElements)
    
    print weirdThing(df, 'b', 'a')
    

    输出:

    ([[0, 1], [3, 4]], [[2], [5, 6]])
    

    【讨论】:

      猜你喜欢
      • 2017-05-28
      • 1970-01-01
      • 2017-08-29
      • 2016-10-13
      • 2022-08-12
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多