簡體   English   中英

從字典中的數據框中不存在的數據框中刪除行

[英]Remove rows from dataframes not present in dataframes in dictionary

我有幾個 pandas 數據幀,例如:

Df1 = 
    MD    A    B    C  
    r1    6    3    9   
    r2    2    1    1  
    r3    5    7    2  
    r4    8    2    0

Df2 = 
    MD    A    B    C  
    r1    1    7    1  
    r2    6    3    0  
    r3    3    1    8
    r4    1    7    4

我也有這樣的字典:

Dict = {'D1', MD
              r1
              r4
        [2 rows x 1 columns]
        'D2', MD
              r1
              r2
              r3
        [3 rows x 1 columns]}
  

我需要的是一種通過字典 go 的方法,對於每個 dataframe 和相應的鍵(即 Df1 和 D1,以及 Df2 和 D2),刪除“字典值數據幀”中不存在的行。

所以對於 Df1,我需要 go 到鍵 D1 並刪除不在 dataframe 中的行。 也就是說,從 Df1 中刪除 r2 和 r3。

所以我想要的結果是:

Df1 = 
    MD    A    B    C  
    r1    6    3    9   
    r4    8    2    0

Df2 = 
    MD    A    B    C  
    r1    1    7    1  
    r2    6    3    0  
    r3    3    1    8

任何幫助是極大的贊賞!

PS。 如果保留行而不是刪除它們更容易,那也會有幫助!

這里我只打印值,但您可以重新分配 DataFrame。

df1 = pd.DataFrame.from_dict({"r1": [1,2,3], "r2": [4,5,6], "r3": [7,8,9]}, columns=["A", "B", "C"], orient="index")
df2 = pd.DataFrame.from_dict({"r1": [1,2,3], "r2": [4,5,6], "r3": [7,8,9]}, columns=["A", "B", "C"], orient="index")

dfs = [df1, df2]

lookup = {"d1": ["r1", 'r2'], 'd2': ["r2", "r3"]}

for rows, df in zip(lookup.values(), dfs):
    print(df.loc[rows])

你的字典有點奇怪,所以我把它編輯到下面的dct中。 基本上每個鍵都有一個對應的dataframe。 然后,您可以使用字典列表zip dct.values()並索引您的相關數據幀。

dct = {'D1': {'MD': ['r1', 'r4']},
       'D2': {'MD': ['r1', 'r2', 'r3']}
      }
df1_new, df2_new = [df[df['MD'].isin(v['MD'])] for v, df in zip(dct.values(),[df1,df2])]

Output:

   MD  A  B  C
 0  r1  6  3  9
 3  r4  8  2  0

    MD  A  B  C
 0  r1  1  7  1
 1  r2  6  3  0
 2  r3  3  1  8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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