首页 > 解决方案 > 从其他列的值中过滤列值并将结果转换为多个列表 Pandas

问题描述

   import pandas as pd

   data = {"Country": ["AA", "BB","CC","DD","EE","FF","GG"],
        "1990": [0,1,1,1,0,1,1],
        "1991": [0,0,1,1,1,0,1],
        "1992": [1,1,1,1,1,0,0],
        "1993": [0,1,1,1,1,0,0]}

   df = pd.DataFrame(data)

目标是:对于 1990-1993 列,如果 value == 1,则将 Country 返回 4 个列表,我还想为每个列表设置一个年度名称,但不知道该怎么做。

这是我的尝试:

    for i in range(1,5):
        print(df[(df == 1)].iloc[:7,0].to_list())

我得到了 4 个 nans 列表的输出......所需的输出是

c1990=["BB", "CC", "DD", "FF", "GG"]
c1991=["CC", "DD", "EE", "GG"]
c1992=["AA", "BB","CC","DD","EE"]
c1993=["BB","CC","DD","EE"]

标签: pythonpandaslist

解决方案


将 dict 理解与groupbyon一起使用的一种方法axis=1

res = {name: i.index[i[name]].tolist() for name, i in df.set_index("Country").astype(bool).groupby(level=0, axis=1)}

print (res)

{'1990': ['BB', 'CC', 'DD', 'FF', 'GG'],
 '1991': ['CC', 'DD', 'EE', 'GG'],
 '1992': ['AA', 'BB', 'CC', 'DD', 'EE'],
 '1993': ['BB', 'CC', 'DD', 'EE']}

推荐阅读