#python #pandas
#python #pandas
Вопрос:
Допустим, у меня есть эта функция, которая просто возвращает мне примененные аргументы и аргументы по умолчанию:
def pattern(ch1=False,ch2=False,ch3=False,ch4=False):
return [ch1,ch2,ch3,ch4]
x = pattern(ch4=True)
x
Out[77]:
[0, 0, 0, True]
Как я мог бы применить вышеуказанную функцию к подмножеству строк с аргументами из столбца «канал» следующего фрейма данных.
df1 = pd.DataFrame({"sample":[1,2,3,4,5,6,7,8],
"channel":["ch1","ch2","ch3","ch4",
"ch1","ch2","ch3","ch4"
],
"available":[True,True,True,True,
False,False,False,False,
]
})
df1 = df1.set_index("sample")
df1
Допустим, я хочу передать индекс строки с 1 по 2, который должен установить параметру ch1 amp; ch2 значение True и вернуть [True, True, False, False]
вторым примером может быть передача строк с 4 по 5. Это должно возвращать [True, False, False,False]
Комментарии:
1. выглядит так
pandas.DataFrame.apply
2. Попробуйте
pattern(ch1=df1.loc[1, 'available'], ch2=df1.loc[2, 'available'])
.3. @ResidentSleeper: Я попробовал ваш код, и он работает, но я предпочитаю код josemz, поскольку он позволяет мне вырезать строки и передавать их функции, но спасибо за ваше предложение
Ответ №1:
Вот вариант:
pattern(**dict(zip(df1.loc[:2].channel, df1.loc[:2].available)))
# [True, True, False, False]
pattern(**dict(zip(df1.loc[4:6].channel, df1.loc[4:6].available)))
# [False, False, False, True]
Комментарии:
1. большое спасибо за ваш код, он работает так, как я хотел! Я не знал, что могу передать пару ключ: значение с функцией zip. Это очень круто!!