基于lis的数据帧值字典提取

2024-06-11 04:06:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在每列中都具有唯一值的数据帧:

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']

现在我想从dataframe中检索一个列,其中包含list和list of elements中的元素

预期产量

{'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和list中获取公共元素,以便将其转换为字典

欢迎提出任何建议

谢谢


Tags: l1listbioclsdf1markprintcols
1条回答
网友
1楼 · 发布于 2024-06-11 04:06:17

使用^{}作为掩码,通过索引替换不匹配的值,并用^{}重塑形状:

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']}

相关问题 更多 >