Как мне превратить столбец pandas в список в зависимости от значения другого столбца? - PullRequest
0 голосов
/ 17 июня 2020

Итак, допустим, у меня есть такая таблица и я сохраняю ее в моем df:

+-------+------+------+------+
| Block | col1 | col2 | col3 |
+-------+------+------+------+
|     1 | A    |    1 | 1F   |
|     1 | B    |    2 | 3D   |
|     1 |      |    3 |      |
|     2 | C    |    2 |      |
|     2 | G    |      |      |
|     3 | H    |    5 | 1D   |
|     3 | I    |    2 | 3H   |
|     3 |      |      | 4K   |
+-------+------+------+------+

Как мне использовать метод

df['col1'].tolist()

, но только когда столбец блока равен 1 Я мог бы oop пройти через это, но я читал, что повторение pandas df - не лучшее решение, и хотел знать, есть ли более разумный способ сделать это.

1 Ответ

0 голосов
/ 17 июня 2020

Примечание. Я подумал, что вы задаете два вопроса, поэтому ответил на оба. Я собираюсь очистить этот ответ через минуту.

Если вам просто нужен список, содержащий элементы col1, для которых в той же строке есть 'Block' == 1;

df = pd.DataFrame({'Block': [1,1,1,2,2,3,3,3], 'col1':['A', 'B', '', 'C', 'G', 'H', 'I', '']})

ones_part = df['Block'] == 1

df[ones_part]['col1'].tolist()

Если вы хотите преобразовать записи col1, когда 'Block' == 1:

df = pd.DataFrame({'Block': [1,1,1,2,2,3,3,3], 'col1':['A', 'B', '', 'C', 'G', 'H', 'I', '']})

df['col1'].where(df['Block'] != 1, other=df['col1'].apply(list))

Кроме того, просто для ясности - есть несколько причин, чтобы не повторять фреймы данных. Во-первых, некоторые операции выполняются намного быстрее с использованием собственных методов pandas; они реализованы в C, а не в python. Другой - для ясности - он считается более читаемым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...