【问题标题】:python groupby column and then getting any false value in each grouppython groupby 列,然后在每个组中获取任何错误值
【发布时间】:2021-11-18 10:59:54
【问题描述】:
dff = (dff.groupby(["column 1", "column 2"]).first()) <br/>
print(dff)

给表

column 1 column 2 column 3
First a true
b false
c true
d false
second a true
b true
c true
Third a true
b false
c true
d false
e false

上表是通过将 3 列中的 2 列分组得到的

column 1 column 2 column 3 column 4
First a true false
b false
c true
d false
second a true true
b true
c true
Third a true false
b false
c true
d false
e false

如上所示,我们希望多一列具有单个值
如果第 3 列(在组级别)中的任何一个值为 false ,则值应为 false ..否则应为 true

请帮忙,因为我被困了 2 天

【问题讨论】:

    标签: python pandas pandas-groupby apply


    【解决方案1】:

    试试这个:

    >>> df.groupby('col1')['col3'].all()
    col1
    First     False
    Second     True
    Third     False
    Name: col3, dtype: bool
    

    【讨论】:

    • 文件 "C:\Python39\lib\site-packages\pandas\core\indexes\multi.py",第 553 行,在 from_tuples arrays = list(lib.tuples_to_object_array(tuples).T)文件“pandas_libs\lib.pyx”,第 2919 行,在 pandas._libs.lib.tuples_to_object_array ValueError: Buffer dtype mismatch, expected 'Python object' but got 'long long' 以上异常是以下异常的直接原因:但是你仍然试图帮助我,谢谢你
    • @jatashankarshukla 你的 DataFrame 的大小是多少?你有多少行?
    • 差不多 1000 行
    【解决方案2】:

    你可以使用.groupby() + .transform() + min,如下:

    dff['column 4'] = dff.groupby(['column 1'])['column 3'].transform('min')
    

    如果至少有一个False 值,则一组True/False 值中的min 将给出False。否则,它会给True

    数据输入

    data = {'column 1': ['First', 'First', 'First', 'First', 'second', 'second', 'second', 'Third', 'Third', 'Third', 'Third', 'Third'],
     'column 2': ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'a', 'b', 'c', 'd', 'e'],
     'column3': [True, False, True, False, True, True, True, True, False, True, False, False]}
    
    dff = pd.DataFrame(data).set_index(['column 1', 'column 2'])
    
    
                       column3
    column 1 column 2         
    First    a            True
             b           False
             c            True
             d           False
    second   a            True
             b            True
             c            True
    Third    a            True
             b           False
             c            True
             d           False
             e           False
    

    结果:

    print(dff)
    
                      column 3  column 4
    column 1 column 2                   
    First    a            True     False
             b           False     False
             c            True     False
             d           False     False
    second   a            True      True
             b            True      True
             c            True      True
    Third    a            True     False
             b           False     False
             c            True     False
             d           False     False
             e           False     False
    
    

    【讨论】:

    • 可能是我做错了什么,但在我的情况下 groupBy 不再有效,并且获得与初始问题中所显示的相同的输出..但是是的,新列 4 正在添加与相同的值显示为第 3 列。感谢 SeaBean 的努力
    • @jatashankarshukla 如果你真的想解决这个问题,请你转储数据集的前几行,以便我检查并给你解决方案吗?请通过dff.head(5).to_dict() 转储前 5 行的数据,并在问题末尾添加转储作为编辑。那我看看吧。
    • c1|dc|ch_1|true|p0 c1|jrs|ch_1|true|p0 c1|jtd|ch_1|true|p0 c1|phost|p_c|true|drwxrwx---。 c1|phost|p_c_d|true|jazz/jazz c1|phost|i_u|false|失败 c1|dc|f_p|true|-rwxr-xr-x。 c1|jrs|f_p|true|-rwxr-xr-x。 c1|jtd|f_p|true|-rwxr-xr-x。 c1|dc|m_f|false|缺席 c1|jrs|m_f|false|缺席 c1|jtd|m_f|true|prsnt c1|dc|a_m|true|prsnt c1|jrs|a_m|true|prsnt c1|jtd|a_m |假|不存在 c1|dc|s_f_p|真|-rwxrwx---。 c1|jrs|s_f_p|true|-rwxrwx---。 c1|jtd|s_f_p|true|-rwxrwx---。 c1|dc|u_s|真| p c1|jrs|u_s|真| p1 c1|jtd|u_s|true|p2
    • @jatashankarshukla 因为你不是从命令dff.head(5).to_dict() 我告诉你的生成转储,所以这里需要更多问题和答案来澄清数据结构。那么,是 5 列而不是 3 列吗?我没有从您的转储中看到列名,所以我们称它们为column 1column 2...``第 5 列'? column 1 都有值 c1 ?恐怕您的数据转储与您为此问题制作的示例数据有很大不同。
    • 我很抱歉,因为我看到你很乐意提供帮助,实际上这些数据由于公司政策我无法分享,但你可以认为这是正确的数据,我的最终目标是从管道分隔的文本文档中获取嵌套的 json 对象。您可以随意命名列。我们还需要对前 3 列进行分组。再次感谢您的及时回复
    猜你喜欢
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    相关资源
    最近更新 更多