我在整个数据集中应用某些逻辑时遇到问题。我能够将逻辑应用于一个小的“组”,但不能应用于所有的组(注意,这些组是由primaryFilter
和secondaryFilter
组成的。您是否介意为我指出正确的方向来进行此操作
import pandas as pd
import numpy as np
myInput = {
'primaryFilter': [100,100,100,100,100,100,100,100,100,100,200,200,200,200,200,200,200,200,200,200],
'secondaryFilter': [1,1,1,1,2,2,2,3,3,3,1,1,2,2,2,2,3,3,3,3],
'constantValuePerGroup': [15,15,15,15,20,20,20,17,17,17,10,10,30,30,30,30,22,22,22,22],
'someValue':[3,1,4,7,9,9,2,7,3,7,6,4,7,10,10,3,4,6,7,5]
}
df_input = pd.DataFrame(data=myInput)
df_input
df_test = df_input[df_input.primaryFilter.isin([100])]
df_test = df_test[df_test.secondaryFilter == 1.0]
df_test['newColumn'] = np.nan
for index,row in df_test.iterrows():
if index==0:
print("start")
df_test.loc[0, 'newColumn'] = 0
elif index==df_test.shape[0]-1:
df_test.loc[index, 'newColumn'] = df_test.loc[index-1, 'newColumn'] + df_test.loc[index-1, 'someValue']
print("end")
else:
print("inter")
df_test.loc[index, 'newColumn'] = df_test.loc[index-1, 'newColumn'] + df_test.loc[index-1, 'someValue']
df_test["delta"] = df_test["constantValuePerGroup"] - df_test['newColumn']
df_test.head()
100,2
和100,3
和200,1
等等
无需使用
iterrows
在这里,您可以group
在primaryFilter
和secondaryFilter
列上的数据帧,然后对于每个唯一组,将someValue
列和shift
列中的值的累积和向下1
位置得到newColumn
。最后从constantValuePerGroup
中减去newColumn
得到delta
相关问题 更多 >
编程相关推荐