我在csv文件中有以下内容

key1    key2    Key3    key4    key5

Val1    A        51     'True'  25
Val1    A        50     'False' 25
Val1    A        49     'True'  25
Val1    A        48     'True'  25
Val2    A        47     'False' 25
Val2    A        46     'True'  25
Val2    A        45     'False' 25
Val2    A        44     'True'  25
Val2    A        43     'True'  25

输出应类似

key1 key2 max_key5 total_key4 total_true_key4
Val1  A   51       4          3
Val2  A   47       5          3 

我必须按键1和键2分组,然后找到键5的最大值、键4的总行数和键4的总真行数

我在try 什么

print(json_data.groupby(["key1","key2"]).agg(
        max_key5=('key5','max'),
        total_key4=('key4','count'),
        total_true_key4 = ("key4", lambda x: count(x == 'TRUE'))   
    )) 

我也试过像belwo一样

print(json_data.groupby(["section","row"]).agg(
    max_key5=('key5','max'),
    total_skey4=('key4','count'),
    total_true_key4 = pd.NamedAgg(
         column="key4", 
         aggfunc=lambda x: (x == True))    
     ))

我没有得到total\u true\u key4的正确值

非常感谢您的任何建议..

谢谢

推荐答案

计算任何数组中True个数的简单方法是取该数组的和(因为它们通常基于整数值0&1;True==1,False==0).

out = (
    json_data.groupby(['key1', 'key2'])
    .agg(
        maxkey5=('key5', 'max'), 
        total_key4=('key4', 'count'), 
        total_true_key4=('key4', 'sum')
    )
)

print(out)
           maxkey5  total_key4  total_true_key4
key1 key2                                      
Val1 A          25           4                3
Val2 A          25           5                3

通过预计算矢量化运算计算特定值(fast)

您可以使用相同的逻辑来计算任何值.首先判断列等于该值的位置,然后求和True.这将是一个性能非常高的解决方案,因为我们利用了真正的矢量化操作.

out = (
    json_data
    .assign(_key4=lambda df_: df_['key4'] == "'True'")
    .groupby(['key1', 'key2'])
    .agg(
        maxkey5=('key5', 'max'), 
        total_key4=('key4', 'count'), 
        total_true_key4=('_key4', 'sum')
    )
)

print(out)
           maxkey5  total_key4  total_true_key4
key1 key2                                      
Val1 A          25           4                3
Val2 A          25           5                3

通过Python函数计数(较慢)

然而,如果您需要易于阅读,您总是将函数传递给groupby.agg操作,而不是依赖'sum'

out = (
    json_data.groupby(['key1', 'key2'])
    .agg(
        maxkey5=('key5', 'max'), 
        total_key4=('key4', 'count'), 
        total_true_key4=('key4', lambda s: (s == "'True'").sum())
    )
)

print(out)
           maxkey5  total_key4  total_true_key4
key1 key2                                      
Val1 A          25           4                3
Val2 A          25           5                3

Python相关问答推荐

如何在msgraph.GraphServiceClient上进行身份验证?

如何计算两极打印机中 * 所有列 * 的出现次数?

如何使用pandasDataFrames和scipy高度优化相关性计算

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

django禁止直接分配到多对多集合的前端.使用user.set()

OR—Tools CP SAT条件约束

部分视图的DataFrame

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

如何在图中标记平均点?

不能使用Gekko方程'

实现神经网络代码时的TypeError

Python列表不会在条件while循环中正确随机化'

Pandas Data Wrangling/Dataframe Assignment

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

Pandas:计算中间时间条目的总时间增量

pandas fill和bfill基于另一列中的条件

如何强制向量中的特定元素在Gekko中处于优化解决方案中

Js的查询结果可以在PC Chrome上显示,但不能在Android Chrome、OPERA和EDGE上显示,而两者都可以在Firefox上运行

递归链表反转与打印语句挂起

Python键盘模块不会立即检测到按键