簡體   English   中英

數據框檢查條件是否與對應的值匹配

[英]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 優化代碼的矢量化方法。 在這里你可以:

  1. 建立參考 dataframe

     ref = pd.DataFrame([['large', 100], ['medium', 50], ['small', 10]], columns=df.columns)
  2. 將其合並到原始 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM