[英]data frame check if the condition is matching with correspond value
假設我有一個數據框,例如:
print(df)
category size
large 100
small 10
medium 50
small 10
medium 40
large 120
我想在類別和大小之間檢查大小是否具有與類別對應的確切值。
large == 100, medium == 50 and small == 10.
我想使用下面給出的語法:
for df_index, df_line in df.iterrows():
如果一行不匹配,則離開該行,否則,刪除一個匹配良好的行。 output 應該像: print(df)
category size
medium 40
large 120
即使您使用iterrows
提出解決方案,我也會給您一種不使用它的方法。 iterrows
方法非常易於使用,但會導致代碼不可擴展,因為它在 pandas 中是一項昂貴的操作。 您應該盡可能嘗試使用使用 C 優化代碼的矢量化方法。 在這里你可以:
建立參考 dataframe
ref = pd.DataFrame([['large', 100], ['medium', 50], ['small', 10]], columns=df.columns)
將其合並到原始 dataframe 並保留具有不匹配值的行:
df.merge(ref, how='left', on='category', suffixes=('', '_ref')).query( "size,= size_ref")[['category', 'size']]
它按預期給出:
category size
4 medium 40
5 large 120
這是基於您的問題的一個; 這是基本但易於理解的:
import pandas as pd
size_chart = {'large':100, 'medium': 50, 'small': 10}
data = {'category': ['large', 'small', 'medium', 'small', 'medium', 'medium'], 'size': [100, 10, 50, 10, 50, 100] }
df = pd.DataFrame (data, columns = ['category','size'])
rows_list = []
for df_index, df_line in df.iterrows():
if df_line['size'] != size_chart[df_line['category']]: rows_list.append( {'category':df_line['category'],'size':df_line['size']} )
df2 = pd.DataFrame (rows_list, columns = ['category','size'])
print (df2)
印刷:
category size
0 medium 100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.