[英]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.