首页 > 解决方案 > 使用 if 子句和 diff() 应用/Lambda

问题描述

要解决的问题是对序列数据在行之间和行内进行计算,并过滤与前一行值匹配的一列中的值。

这是我的数据: 按日期排列的累积数据列

日期。cumulativePositiveTests.cumulativeNegativeTests stateName
7 2020-03-15 1.0 143.0 Alaska
8 2020-03-16。1.0 143.0 阿拉斯加
9. 2020-03-17 3.0 334.0 阿拉斯加
10 2020-03-18 6.0 406.0 阿拉斯加
11 2020-03-19 6.0 432.0 阿拉斯加

当我只处理一个状态时,这有效:

COVID_df['Dly_PosTests'] = COVID_df['cumulativePositiveTests'].diff()
COVID_df['Dly_NegTests'] = COVID_df['cumulativeNegativeTests'].diff()
COVID_df['Dly_Tests'] = COVID_df['Dly_PosTests'] + COVID_df['Dly_NegTests']
COVID_df['Dly_Pos_Rate'] = (100* (COVID_df['Dly_PosTests'] / COVID_df['Dly_Tests']))

现在我有不止一个状态,我正在考虑一个带有 diff() 的 apply/lambda,但我无法获得正确的语法。

试过这个:

for i in range(7,(len(Chart_Data)-1):
    Chart_Data.apply(lambda x:(x['cumulativePositiveTests'].diff()),axis=1) 
    if Chart_Data['stateName'].shift() == Chart_Data['stateName'] else None) 

谢谢,

艾莉森

标签: pythonlambdaapplydiff

解决方案


想我明白了,但想知道其他东西是否会表现得更好?

def CovidCalc(gr):
     Chart_Data['Dly_PosTests'] = Chart_Data['cumulativePositiveTests'].diff()
     Chart_Data['Dly_NegTests'] = Chart_Data['cumulativeNegativeTests'].diff()
     Chart_Data['Dly_Tests'] = Chart_Data['Dly_PosTests'] + Chart_Data['Dly_NegTests']
     Chart_Data['Dly_Pos_Rate'] = (100* (Chart_Data['Dly_PosTests'] / Chart_Data['Dly_Tests']))
     return None

然后

covid_range=(len(Chart_Data)-1)

然后

for i in range(7,covid_range):
           Chart_Data.groupby("stateName").apply(CovidCalc)
           

感谢这篇文章:如何在 Pandas groupby 中使用 Split-Apply-Combine 策略


推荐阅读