python-2.7 - 如何将数据框中的列值解压缩为 Python 中的列名
问题描述
我有一个如下的数据框
Name Place Age
Joe [NYC, Paris, Madrid] 33
Mary [Rome] 30
Jack [Paris, Madrid] 35
我希望数据框中的输出为
Name NYC Paris Madrid Rome Age
Joe Yes Yes Yes No 33
Mary No No No Yes 30
Jack No Yes Yes No 35
我试图以各种方式做到这一点,比如
cities = ['NYC', 'Rome', 'Madrid', 'Paris']
for city in cities:
df_city = df.apply(lambda x: x in city if x==x else False)
df[city]=df_city //Creating a column name based on the city. But this gives an error stating array size doesn’t match
我也尝试了以下
if(city=='NYC'):
df[city].append("True")
elif(city=='Paris'):
df[city].append("True")
elif(city=='Madrid'):
df[city].append("True")
else(city=='Rome'):
df[city].append("True")
但这只会给我
Name NYC Paris Madrid Rome Age
Joe No Yes No No 33
Mary No No No No 30
Jack No Yes No No 35
提前致谢
解决方案
试试这个,这些是操作的步骤。
- 逐行应用 subdf 数据帧的填充函数
- 迭代填充函数中每一行的值(城市名称)
- 检查行值(城市)是否与 bool_cities 列名称匹配(bool_cities 列是相同的城市名称)
- 例如“NYC”位于 subdf 的第 0 行第 0 列。所以我们可以说“NYC”应该在第 0 行。所以我们可以将 bool_cities df, “NYC” 列的第 0 位填充为 True
import pandas as pd
import numpy as np
df = pd.DataFrame([["Joe", ["NYC", "Paris", "Madrid"] , 33],
["Mary", ["Rome"] ,30],
["Jack", ["Paris", "Madrid"],35]])
df.columns = ["Name","Place","age"]
subdf = pd.DataFrame(df["Place"].to_list())
unique_cities = list(pd.unique(subdf.values.ravel()))
unique_cities.remove(None)
bool_cities = pd.DataFrame(np.zeros((len(df),len(unique_cities))),columns=unique_cities)
def fill(x):
for i in x.values:
if i in list(bool_cities.columns):
bool_cities.loc[x.name,i]=1
subdf.apply(lambda x: fill(x),axis=1)
bool_cities=bool_cities.astype(bool)
bool_cities = bool_cities.replace({True:"Yes", False:"No"})
result = pd.concat([df.drop("Place",axis=1),bool_cities],axis=1)
输出
Name age NYC Paris Madrid Rome
0 Joe 33 Yes Yes Yes No
1 Mary 30 No No No Yes
2 Jack 35 No Yes Yes No
推荐阅读
- sql - 物化视图并发刷新比非并发刷新花费的时间要长得多
- react-native - react-router-native,NativeRouter.js 模块解析失败 - 意外令牌
- javascript - 如何在年龄验证弹出窗口中使用带有是/否按钮的 JavaScript?
- azure - Azure 数据目录与 Azure SQL Server 元数据接口 - 发布数据源时不获取 Azure SQL Server 元数据
- java - 如何使用 Quarkus 以两种方式 SSL 从 REST 服务中的请求中检索客户端证书
- c++ - 在 c++/mysql 项目中使用单个preparedStatement 进行多次插入
- reactjs - useQuery 和 useEffect 用于简单搜索
- python - 如何解决此错误“cv2.COLOR_BGR2GRAY”?
- aspnetboilerplate - useraccount 类是做什么用的?
- android - 如何手动输入条形码以获取 react-native 中的数据?