【发布时间】:2023-01-15 16:18:19
【问题描述】:
我给出了示例数据框:
import pandas as pd
df = pd.DataFrame({
'company_name': ['do holdings co', 'real estate b.v.', 'real estate b.v.','real coiffure', 'real coiffure', 'elendom', 'theatre media ltd'],
'sector_1': ['Industrials', 'Finance', 'Finance','Consumer', 'Consumer','Real Estate', 'Media'],
'company_country': ['USA', 'Poland', 'Poland','USA','USA', 'Poland', 'Canada'],
'keyword': ['holding', 'real', 'estate','real','coiffure', 'elendom', 'theatre'],
'value': [1,1,1,1,1,1,1],
'sector': ['Finance', 'Real Estate', 'Real Estate', 'Real Estate', 'Consumer', 'Real Estate', 'Media']
})
我正在检查公司名称中是否存在关键字,如果存在 - 我正在为它们分配匹配的扇区(列扇区,sector_1 - 请暂时忽略)。
我有一个关键字列表,你可以看到它们在关键字列中重复 - 因为我正在检查每个公司。我已经过滤掉出现次数为 0 的关键字。
我想将表格更改为宽格式,但我们有重复的关键字 - 然后分配两个扇区,结果应如下所示:
df_results = pd.DataFrame({
'company_name': ['do holdings co', 'real estate b.v.', 'real coiffure', 'elendom', 'theatre media ltd'],
'sector_1': ['Industrials', 'Finance','Consumer', 'Real Estate', 'Media'],
'company_country': ['USA', 'Poland','USA', 'Poland', 'Canada'],
'holding': [1,0,0,0,0],
'real': [0,1,1,0,0],
'estate': [0,1,0,0,0],
'coiffure': [0,0,1,0,0],
'elendom': [0,0,0,1,0],
'theatre': [0,0,0,0,1],
'sector': ['Finance', ['Real Estate', 'Real Estate'],['Real Estate', 'Consumer'], 'Real Estate', 'Media']
})
我在执行此任务时遇到问题,感谢您的帮助。
编辑:
这就是我一直在尝试的,虽然还不完美,但已经差不多了:
df_wide = pd.crosstab(index=df['company_name'], columns=df['keyword'], values=df['value'], aggfunc='sum')
df_wide['sector'] = df.groupby('company_name')['sector'].apply(lambda x: list(set(x)))
df_results = pd.merge(df_wide, df[['company_name','sector_1','company_country']], on='company_name', how='left')
【问题讨论】:
-
如果您的问题没有更多背景信息,我会怀疑您的目标数据框
df_results是否是一个好方法。那是因为它是一个非常不标准的数据结构。你能提供更多关于你将如何使用df_results的信息吗?
标签: python pandas dataframe formatting dummy-variable