大熊猫列列表分开行

时间:2017-09-15 17:32:07

标签: python list pandas dataframe

我有一个数据框,其中包含分析的新闻文章,每行引用一篇文章和列,其中包含有关该文章的一些信息(例如语气)。 该df的一列包含该文章中提到的位置的FIPS国家代码列表。

我想"提取"这些国家/地区代码,以便我得到一个数据框,其中每个提到的位置都有自己的行,以及引用该位置的原始行的其他列(将有多个行具有相同的信息,但位置不同,如同一篇文章可能会提到多个地点)。

我尝试了类似这样的东西,但iterrows()的速度非常慢,所以有没有更快/更有效的方法让我这样做? 非常感谢。

  • '事件'是包含位置的列
  • ' event_cols'是我希望在新df中保留的原始df中的列。
  • ' df_events'是新的数据框架
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

1 个答案:

答案 0 :(得分:2)

我会将DataFramegroupby()分组,使用applylambda函数的组合展开列表,然后重置索引并删除级别列创建它是为了清理生成的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()的方法,因为它通常比迭代每行快得多。

相关问题