我正在处理一个情况,需要根据每个方法的状态变化来计算数量。 数据框。content
是。
count method_a method_b
1 A A
175 B A
179 A A
242 D C
243 B C
要求是,如果状态发生变化,从。A 到 B 在 method_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
改为 A
到 C
之后 241
循环 count
(242-1)我们需要加数,直到状态不改变。242-179 + 179-175 + 175-1.
有什么建议吗?
这看起来像是一个工作 DataFrame.shift
和 DataFrame.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
我定义错误 A, B, C, D =[], [], [], []
哪里只需要设置 count
归零
A, B, C, D = 0,0,0,0
.
每当状态发生变化时,这个计数就会更新。