簡體   English   中英

根據列表從數據框中提取值作為字典

[英]Extracting values as a dictionary from dataframe based on list

我在每一列中都有一個具有唯一值的數據框:

df1 = pd.DataFrame([["Phys","Shane","NY"],["Chem","Mark","LA"],
                    ["Maths","Jack","Mum"],["Bio","Sam","CT"]],
                    columns = ["cls1","cls2","cls3"])
print(df1)

    cls1    cls2    cls3
0   Phys    Shane   NY
1   Chem    Mark    LA
2   Maths   Jack    Mum
3   Bio     Sam     CT

和清單l1:

l1=["Maths","Bio","Shane","Mark"]
print(l1)

['Maths', 'Bio', 'Shane', 'Mark']

現在,我想從數據框中檢索包含列和元素列表中的元素的列。

預期產量

{'cls1' : ['Maths','Bio'], 'cls2': ['Shane','Mark']}

我有的代碼

cls = []
for cols in df1.columns:
    mask = df1[cols].isin(l1)
    if mask.any():
        cls.append(cols)
print(cls)

上面代碼的輸出

['cls1', 'cls2']

我正在努力從數據框和列表中獲取通用元素,以將其轉換為字典。

歡迎任何建議。

謝謝。

使用DataFrame.isin的面具,通過索引替代非匹配值,並與重塑stack

df = df1[df1.isin(l1)].stack()
print (df)
0  cls2    Shane
1  cls2     Mark
2  cls1    Maths
3  cls1      Bio
dtype: object

通過dict comprehension最后創建列表:

d = {k:v.tolist() for k,v in df.groupby(level=1)}
print(d)
{'cls2': ['Shane', 'Mark'], 'cls1': ['Maths', 'Bio']}

另一個解決方案:

d = {}
for cols in df1.columns:
    mask = df1[cols].isin(l1)
    if mask.any():
        d[cols] = df1.loc[mask, cols].tolist()

print(d)
{'cls2': ['Shane', 'Mark'], 'cls1': ['Maths', 'Bio']}

暫無
暫無

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

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