Подобно этому вопросу Панды интерполируют внутри группы, но ответ на этот вопрос выполняет интерполяцию () для всех столбцов. Если я хочу ограничить интерполяцию() только одним столбцом, как мне это сделать?
Вход
filename val1 val2
t
1 file1.csv 5 10
2 file1.csv NaN NaN
3 file1.csv 15 20
6 file2.csv NaN NaN
7 file2.csv 10 20
8 file2.csv 12 15
Ожидаемый результат
filename val1 val2
t
1 file1.csv 5 10
2 file1.csv NaN 15
3 file1.csv 15 20
6 file2.csv NaN NaN
7 file2.csv 10 20
8 file2.csv 12 15
Эта попытка возвращает только столбец val2, но не остальные столбцы.
df = df.groupby('filename').apply(lambda group: group['val2'].interpolate(method='index'))
Прямой подход:
df = pd.read_clipboard() # clipboard contains OP sample data
# interpolate only on col "val2"
df["val2_interpolated"] = df[["filename","val2"]].groupby('filename')
.apply(lambda x:x) # WTF
.interpolate(method='linear')["val2"]
возвращает:
filename val1 val2 val2_interpolated
t
1 file1.csv 5.0 10.0 10.0
2 file1.csv NaN NaN 15.0
3 file1.csv 15.0 20.0 20.0
6 file2.csv NaN NaN 20.0
7 file2.csv 10.0 20.0 20.0
8 file2.csv 12.0 15.0 15.0
groupby
есть ключевое слово ignore_index
, это было бы лучше, чем использовать reset_index
постфактум~
идеальный! именно то, что я искал, и да, даже будучи новичком в пандах, эта лямбда x: x была моментом WTF!
Если он возвращает только столбец
val2
... как и ожидалось... тогда только поместите результаты в столбецval2
...df['val2'] = df.groupby(...