Ряды в пандах удовлетворяют некоторым условиям, присваивают значения условий условия одной ячейке - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть фрейм данных с некоторыми значениями.

Предположим, что это значения некоторых хранилищ, и хранилища могут выполнить некоторые условия и дать им более одного ' состояния ', но другие магазины могут выполнить только одно условие и им может быть назначено только одно ' состояние '.

Например:

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

Здесь я использовал список, но это идея.

А потом, еслиЯ делаю магазин в клетке, как я их называю, и как я используюВ столбце « Состояние » больше одного значения для других условий, которые зависят от этого столбца?

Я ценю это

1 Ответ

0 голосов
/ 01 февраля 2019

Это сложный вопрос, я не рекомендую смешивать тип данных в одном столбце, так как вы показали, что 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      []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...