У меня есть фрейм данных с тысячами строк, этот пример df показывает различные типы существующих строк:
df = pd.DataFrame({'col1': ['1', '2', '2', '3'],
'col2': ['10', '15', '20', '30'],
'col3': ['cat', 'dog', 'cat', 'cat'],
'col4': [0.2, 0.9, 'dog', 0.5],
'col5': [None, None, 0.3, 'dog'],
'col6': [None, None, None, 0.1]})
col1
, col2
в порядке как есть.Для остальной части строки я хочу, чтобы cat
, dog
и catdog
стали заголовками столбцов.Если в строке присутствует заголовок столбца, любое значение непосредственно после него должно быть значением в этом столбце.
Правила для каждой строки:
- Если строка содержит только
cat
, десятичное значение помещается в столбец cat
(dog
и catdog
столбцы имеют None
). - Если строка содержит только
dog
, десятичное значение помещается в *Столбец 1022 * (столбцы cat
и catdog
имеют None
). - Если в строке есть и
cat
, и dog
, но только 1 десятичное число, это десятичное число должно быть меньше catdog
, а также cat
и dog
. - .Если в строке есть и
cat
, и dog
, но 2 десятичных числа, десятичное число идет под столбцом, который предшествует номеру (с None
в catdog
).
ДляНапример, в первом ряду 0.2
идет сразу после cat
, поэтому он будет идти в этом столбце (в строке с 1
и 10
из col1/col2
).
В третьем ряду 0.3
- после "cat
, dog
", поэтому 0.3
идет во все столбцы: cat
, dog
и catdog
.
Желаемый выход:
dfoutput = pd.DataFrame({'col1': ['1', '2', '2', '3'],
'col2': ['10', '15', '20', '30'],
'cat': [0.2, None, 0.3, 0.5],
'dog': [None, 0.9, 0.3, 0.1],
'catdog': [None, None, 0.3, None]})