我有一个带有某些值的数据框。
假设这确实是某些商店的值,并且商店确实可以满足某些条件并为其提供多个“ 状态”,但是其他商店只能满足一个条件并且仅被分配一种“ 状态”。
例如:
df = DataFrame({'one':[1,2,3,4],
'two';[5,6,7,8],
'three':[9,10,11,12]}
这是我的条件:
df.loc[(df.one >= 1) & (df.two <= 7),'State'] = 1
df.loc[(df.one == 1) & (df.two <= 11),'State'] = 2
三行满足第一个条件,但只有一行满足第二个条件。
满足两个条件的行应在列' State '中具有状态1和2。
一个明显的问题是,当第一个条件得到分配时,DataFrame如下所示:
one two three State
0 1 5 9 1.0
1 2 6 10 1.0
2 3 7 11 1.0
3 4 8 12 NaN
当第二个条件得到分配时,数据框如下所示:
one two three State
0 1 5 9 2.0
1 2 6 10 1.0
2 3 7 11 1.0
3 4 8 12 NaN
我想要这样的东西:
one two three State
0 1 5 9 [1.0,2.0]
1 2 6 10 1.0
2 3 7 11 1.0
3 4 8 12 NaN
在这里我使用了一个列表,但这就是想法。
然后,如果我在单元格中进行存储,该如何称呼它们,以及如何使用“ 状态”列中具有多个值的单元格来处理依赖于该条件的其他条件专栏?
我很感激
答案 0 :(得分:1)
这是一个棘手的问题,我不建议您将数据类型混入一列,因为您显示第一个单元格是类型列表,1和2是int类型,最后一个是NaN
(被认为是float) ),在这种情况下,为什么不让它们全部列出
s1=(df.one >= 1) & (df.two <= 7)
s2=(df.one == 1) & (df.two <= 11)
l=[[ z for z in [x,y] if z != 0]for x , y in zip(s1*1,s2*2)]
df['State']=l
df
Out[21]:
one two three State
0 1 5 9 [1, 2]
1 2 6 10 [1]
2 3 7 11 [1]
3 4 8 12 []