#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 :p3. @mozway — Спасибо, использовал
reindex
, но обобщилrange
4. @not_speshal да, конечно, я не хотел публиковать много кода в качестве комментария 😉