2 回答

TA貢獻1827條經(jīng)驗 獲得超9個贊
要檢查一個對象是否在某物中而不是檢查它是否等于某物,請使用in.
if place in different:
同樣地
elif place in normal:
編輯:
如果你把它變成一個函數(shù),它應(yīng)該是這樣的。基本上,您只需要做一些def my_function_name(arguments):事情,然后縮進其余代碼,使其屬于該函數(shù)。像這樣:
import pandas as pd
def get_subset(df, place):
normal = ['a','b']
different = ['v','w','x','y','z']
different_subset_start = 2
normal_subset_start = 4
subset_end = 8
if place in different:
df1 = df[(df['period'] >= different_subset_start) & (df['period'] <= subset_end)].drop_duplicates(subset = 'period')
elif place in normal:
df1 = df[(df['period'] >= normal_subset_start) & (df['period'] <= subset_end)].drop_duplicates(subset = 'period')
else:
df1 = None
return df1
df = pd.DataFrame({
'period' : [1.0, 1.0, 2.0, 2.0, 3.0, 4.0, 5.0, 7.0, 7.0, 8.0, 9.0],
})
place = 'a'
print(get_subset(df, place))

TA貢獻1798條經(jīng)驗 獲得超3個贊
看看for val in df:你的代碼。這樣的結(jié)構(gòu)很奇怪,因為您不使用val變量。
將代碼的最后一個片段更改為如下所示:
def fn():
if place in different:
print('place is different')
return df[df.period.between(different_subset_start, subset_end)]\
.drop_duplicates(subset='period')
elif place in normal:
print('place is normal')
return df[df.period.between(normal_subset_start, subset_end)]\
.drop_duplicates(subset = 'period')
else:
print('Incorrect input for place. Please check value')
在您的情況下subset = 'period'是多余的,因為period是 DataFrame 中的唯一列。
也不需要最后一次返回。如果函數(shù)執(zhí)行到代碼末尾,它會返回而不返回任何值。
還有一個細節(jié):如果您的DataFrame有一個列,那么一個Series就足夠了?
添加回答
舉報