熊猫列分隔列
问题描述:
我有一个数据框,其中包含分析的新闻文章瓦特/每行引用文章和列W /关于该文章(如音)的一些信息。 该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
答
我会组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()
大多数其他方法之前,因为它往往比遍历各行要快得多。
我已经找到了解决我的问题,在切换到itertuples()使它神奇快:在df.itertuples() '数据= [] 用于行: 用于行位置[14]:#定义的位置在元组中的位置 data.append(row [0:13] +(location,))' –
我的解决方案不起作用吗?请给它一个机会 - 它可能更高效,更紧凑。 –