【发布时间】:2020-08-20 11:39:53
【问题描述】:
我有一个非常复杂的(对我而言)情况,我需要处理一个数据帧,其中每个索引都有多行,根据特定列的值,这可能是三种情况之一。
数据框如下所示:
Index Account Postfix ID val1 val2
AA11 AA 11 aa 1 2
AA11 AA 11 aa 1 2
AA11 AA 11 aa 1 2
BB22 BB 22 bb 1 1
BB22 BB 22 NA 2 2
BB22 BB 22 NA 3 3
CC33 CC 33 NA 1 2
CC33 CC 33 NA 1 2
CC33 CC 33 NA 1 2
每个唯一索引都可以属于以下三种情况之一:
- 答:总是填充 ID,从每个索引的第一行获取 val1 和 val2
- S:有时会填充 ID,从 ID != Na 的行中获取 val1,从 ID = Na 的行中获取 val2 的总和
- N:从不填充 ID,将所有行的 val1 和 val2 相加
我的第一个问题是我不知道如何检查同一索引的多行中的列值。
我在想这样的事情:
indices = df.index.unique()
for index in indices:
df[ScenarioA] = np.all(df.loc[index, ID])
df[ScenarioN] = np.all(np.logical_not(df.loc[index, ID]))
df[ScenarioS] = np.logical_and(np.logical_not(df[ScenarioA]),np.logical_not(df[ScenarioN]))
但这会导致所有行都被标记为 ScenarioN,而实际上结果应该如下所示:
Index Account Postfix ID val1 val2 ScenarioA ScenarioS ScenarioN
AA11 AA 11 aa 1 2 True False False
AA11 AA 11 aa 1 2 True False False
AA11 AA 11 aa 1 2 True False False
BB22 BB 22 bb 1 1 False True False
BB22 BB 22 NA 2 2 False True False
BB22 BB 22 NA 3 3 False True False
CC33 CC 33 NA 1 2 False False True
CC33 CC 33 NA 1 2 False False True
CC33 CC 33 NA 1 2 False False True
完成后,我需要执行求和并得到类似下面的结果,但我认为这部分不会太难,因为我可以通过 Scenario 并根据需要执行计算:
Index Account Postfix ID val1 val2
AA11 AA 11 aa 1 2
BB22 BB 22 bb 1 5
CC33 CC 33 NA 3 6
我在尝试将 T/F 分配给 Scenario 列的部分做错了什么?
【问题讨论】:
标签: python pandas numpy dataframe indexing