【问题标题】:Filter column value from other columns' values and turn the results into multiple lists Pandas从其他列的值中过滤列值并将结果转换为多个列表 Pandas
【发布时间】:2020-11-13 04:57:55
【问题描述】:
   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 个列表,我还想为每个列表设置一个 #name of the year,不知道该怎么做。

这是我的尝试:

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

【问题讨论】:

  • 我不明白“将国家/地区返回到 4 个列表”应该是什么意思。对于您提供的输入示例,请准确显示结果 DataFrame 应该是什么。
  • @KarlKnechtel 刚刚编辑了帖子,看看它现在是否更有意义。谢谢!

标签: python pandas list


【解决方案1】:

axis=1 上使用带有groupby 的dict 理解的一种方法:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-10-02
  • 2015-02-24
  • 2022-11-03
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
相关资源
最近更新 更多