列の1つのサブ文字列に基づいてPythonデータフレームをフィルタリングしようとしています。Python、Pandas:関数に基づいてデータフレームの行をフィルタリングします。
IDフィールドの位置13 & 14の番号が< = 9の場合、行を保持したい場合は、行が9より大きい場合は行を削除したいと考えています。
例:
ABCD-3Z-A93Z-01A-11R-A37O-07 - >保つ
ABCD-3Z-A93Z-11A-11R-A37O-07 - >ドロップ
私は下のソリューションに到達することができましたが、より迅速かつ効率的な方法が必要であると思います。その後、
位置によって値に対するimport pandas as pd
# Enter some data. We want to filter out all rows where the number at pos 13,14 > 9
df = {'ID': ['ABCD-3Z-A93Z-01A-11R-A37O-07', 'ABCD-6D-AA2E-11A-11R-A37O-07', 'ABCD-6D-AA2E-01A-11R-A37O-07',
'ABCD-A3-3307-01A-01R-0864-07', 'ABCD-6D-AA2E-01A-11R-A37O-07', 'ABCD-6D-AA2E-10A-11R-A37O-07',
'ABCD-6D-AA2E-09A-11R-A37O-07'],
'year': [2012, 2012, 2013, 2014, 2014, 2017, 2015]
}
# convert to df
df = pd.DataFrame(df)
# define a function that checks if position 13&15 are > 9.
def filter(x):
# that, if x is a string,
if type(x) is str:
if int(float(x[13:15])) <= 9:
return True
else:
return False
else:
return False
# apply function
df['KeepRow'] = df['ID'].apply(filter)
print(df)
# Now filter out rows where "KeepRow" = False
df = df.loc[df['KeepRow'] == True]
print(df)
# drop the column "KeepRow" as we don't need it anymore
df = df.drop('KeepRow', axis=1)
print(df)
ブリリアント、ありがとう!とても簡単!私は5分で答えを受け入れることができます私に言っているStackoverflowです。そうするでしょう。 – Laura