我有一个数据框,其中包含分析的新闻文章,每行引用一篇文章和列,其中包含有关该文章的一些信息(例如语气)。 该df的一列包含该文章中提到的位置的FIPS国家代码列表。
我想"提取"这些国家/地区代码,以便我得到一个数据框,其中每个提到的位置都有自己的行,以及引用该位置的原始行的其他列(将有多个行具有相同的信息,但位置不同,如同一篇文章可能会提到多个地点)。
我尝试了类似这样的东西,但iterrows()的速度非常慢,所以有没有更快/更有效的方法让我这样做? 非常感谢。
for i, row in df.iterrows():
for location in df.events.loc[i]:
try:
df_storage = pd.DataFrame(row[event_cols]).T
df_storage['loc'] = location
df_events = df_events.append(df_storage)
except ValueError as e:
continue
答案 0 :(得分:2)
我会将DataFrame
与groupby()
分组,使用apply
和lambda
函数的组合展开列表,然后重置索引并删除级别列创建它是为了清理生成的DataFrame
。
df_events = df.groupby(['event_col1', 'event_col2', 'event_col3'])['events']\
.apply(lambda x: pd.DataFrame(x.values[0]))\
.reset_index().drop('level_3', axis = 1)
一般来说,我总是试图找到一种在大多数其他方法之前使用apply()
的方法,因为它通常比迭代每行快得多。