Слияние определенных значений в панде df
Я в настоящее время объединяю первый и последний string
в row
, Эти strings
объединяются, когда они находятся справа от определенного значения. Я надеюсь изменить это значение ниже определенного значения.
import pandas as pd
d = ({
'A' : ['X','Foo','','X','Big'],
'B' : ['No','','','No',''],
'C' : ['Merge','Bar','','Merge','Cat'],
})
df = pd.DataFrame(data = d)
m = df.A == 'X'
def f(x):
s = x[x!= '']
x[s.index[1]] = x[s.index[1]] + ' ' + x[s.index[-1]]
x[s.index[-1]] = ''
return x
df = df.astype(str).mask(m, df[m].apply(f, axis=1))
Этот код объединяет первый и последний string
когда следует X
,
Выход:
A B C
0 X No Merge
1 Foo Bar
2
3 X No Merge
4 Big Cat
Я надеюсь изменить это на rows
ниже значения X
,
Предполагаемый выход:
A B C
0 X No Merge
1 Foo Bar
2
3 X No Merge
4 Big Cat
1 ответ
Решение
Решение очень похоже, смещается только логическая маска, а первый NaN заменяется на False
а также показатели из [1]
изменены на [0]
для выбора первого значения (столбца A
):
m = (df.A == 'X').shift().fillna(False)
def f(x):
s = x[x!= '']
x[s.index[0]] = x[s.index[0]] + ' ' + x[s.index[-1]]
x[s.index[-1]] = ''
return x
df = df.astype(str).mask(m, df[m].apply(f, axis=1))
print (df)
A B C
0 X No Merge
1 Foo Bar
2
3 X No Merge
4 Big Cat