python - 从其他列的值中过滤列值并将结果转换为多个列表 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"]
解决方案
将 dict 理解与groupby
on一起使用的一种方法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']}
推荐阅读
- hibernate - 具有多个数据源的 Spring Boot JPA AttributeConverter
- spring - 将@RequestParam 转换为小写
- java - 显示/隐藏特定片段的底部导航视图
- docker - Docker - 无法通过 Docker 仪表板启动或停止容器组
- prism - 在我看来,我需要做什么才能使 Prism.Uno 与 x:Bind 一起使用?
- javascript - 如何使用 html 和 javascript 在 db 中插入数据信息
- python - 导入为全局变量时,格式方法不会为字符串赋值
- javascript - Google 表单插件 - 常量变量 - 永久保存值
- python - Python:在同一行中打印带有首选小数位数的字符串和数字
- c# - 折线在画布上绘制的位置错误