要看状态变化

问题描述 投票:-3回答:2

我正在处理一个情况,需要根据每个方法的状态变化来计算数量。 数据框。content 是。

count   method_a method_b
1       A        A  
175     B        A  
179     A        A
242     D        C
243     B        C

要求是,如果状态发生变化,从。ABmethod_a &amp。method_b

我试过下面的方法。

A, B, C, D = 0, 0, 0, 0 
for i in range(len(content)-1):
    if ((content.method_a.iloc[i]) != (content.method_a.iloc[i+1])):
        if content.method_a.iloc[i] == 'A':
            A_ = content.count.iloc[i+1] - content.count.iloc[i]
            A = A + A_
        elif content.method_a.iloc[i] == 'B':
            B_ = content.count.iloc[i+1] - content.count.iloc[i]
            B = B + B_
        elif content.method_a.iloc[i] == 'C':
            C_ = content.count.iloc[i+1] - content.count.iloc[i]
            C = C + C_
        elif content.method_a.iloc[i] == 'D':
            D_ = content.count.iloc[i+1] - content.count.iloc[i]
            D = D + D_

解决方案应该是这样的: method_a: A = 237, B = 4, C = 0, D= 1method_b : A = 241, B = 0, C = 1, D= 0.

编辑。

{fnTahomafs10bord0shad01cH00FFFF}Thevalueof A 是指改变后的状态和当前状态之间的差异:例如:。method_a : A 变更后的状态 count(175-1) 174,然后从 count(242-179)即63,所以总的来说 A的是 174+63 = 237一样 method_b 状况 A 改为 AC 之后 241 循环 count (242-1)我们需要加数,直到状态不改变。242-179 + 179-175 + 175-1.

有什么建议吗?

python pandas
2个回答
0
投票

这看起来像是一个工作 DataFrame.shiftDataFrame.groupby

import io
import pandas as pd

data = io.StringIO("""
count, method_a, method_b
   1,      A,        A
 175,      B,        A
 179,      A,        A
 242,      D,        C
 243,      B,        C
    """.strip())

df = pd.read_csv(data, skipinitialspace=True)

# create a column with the change in counts
df['delta'] = df['count'].shift(-1) - df['count']

# then groupby 'method_a' column and sum the `delta` column
df.groupby('method_a')['delta'].sum()

返回。

method_a
A    237.0
B      4.0
D      1.0
Name: delta, dtype: float64

类似的还有 method_b:

df.groupby('method_b')['delta'].sum()

返回。

method_b
A    241.0
C      1.0
Name: delta, dtype: float64

0
投票

我定义错误 A, B, C, D =[], [], [], [] 哪里只需要设置 count 归零

A, B, C, D = 0,0,0,0.

每当状态发生变化时,这个计数就会更新。

© www.soinside.com 2019 - 2024. All rights reserved.