Разделите столбец на несколько столбцов с условием

#python #split

Вопрос:

У меня есть вопрос о разделении столбцов на несколько строк в Pandas с условиями. Например, я обычно делаю что-то следующее, но использование цикла for занимает очень много времени

 | Index | Value | | ----- | ----- | | 0 | 1 | | 1 | 1,3 | | 2 | 4,6,8 | | 3 | 1,3 | | 4 | 2,7,9 |  

в

 | Index | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | | ----- | - | - | - | - | - | - | - | - | - | | 0 | 1 | | | | | | | | | | 1 | 1 | | 3 | | | | | | | | 2 | | | | 4 | | 6 | | 8 | | | 3 | 1 | | 3 | | | | | | | | 4 | | 2 | | | | | 7 | | 9 |  

Интересно, есть ли какие-либо пакеты, которые могут помочь в этом, а не писать цикл for для сопоставления всех индексов.

Ответ №1:

Предполагая, что столбец «Значение» содержит строки, вы можете использовать str.split и pivot так:

 value = df["Value"].str.split(",").explode().astype(int).reset_index() output = value.pivot(index="index", columns="Value", values="Value") output = output.reindex(range(value["Value"].min(), value["Value"].max() 1), axis=1)  gt;gt;gt; output  Value 1 2 3 4 5 6 7 8 9 index  0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN 1 1.0 NaN 3.0 NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN 4.0 NaN 6.0 NaN 8.0 NaN 3 1.0 NaN 3.0 NaN NaN NaN NaN NaN NaN 4 NaN 2.0 NaN NaN NaN NaN 7.0 NaN 9.0  
Ввод df :
 df = pd.DataFrame({"Value": ["1", "1,3", "4,6,8", "1,3", "2,7,9"]})  

Комментарии:

1. Спасибо, это спасает мне жизнь!

2. обратите внимание, что некоторые столбцы отсутствуют (например, 5), которые вы все равно должны добавить .reindex(map(str, range(10)), axis=1) , 1 :p

3. @mozway — Спасибо, использовал reindex , но обобщил range

4. @not_speshal да, конечно, я не хотел публиковать много кода в качестве комментария 😉