一行拆分为多行
假设原始数据名为df
有四个字段,分别是:品牌,话题,互动量,声量
需求:一条里面有多个话题,需要按照|
拆分成多行单个话题
思路如下:
- 用
list_topic
记录所有出现过的话题,用list_repeat
记录原来每一行中的话题个数,即每一行需要重复的次数
for x in df['话题']:
list_topic.extend(x.split('|'))
list_repeat.append(len(x.split('|')))
- 然后用
df.value.repeat
函数和list_repeat
实现对df的定位重复
df_new = pd.DataFrame(df.values.repeat(list_repeat, axis=0), columns=['品牌', '话题', '声量', '总互动量'])
- 更改【话题】列
df_new['话题'] = list_topic
关于以上的问题,一开始想到的方法是:对每一条话题拆分之后循环,在其中创建几条新的数据之后,concat或者append到一个总表里,当数据量很大时这个方法效率非常低。使用
df.value.repeat
,将数据变为np.array之后再按照一定规则(list_repeat
)复制,可以大大提高效率
新方法 2022-07-12
代码如下:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
'品牌': ['小米', '小米'],
'话题': ['雷军|mix4|屏下摄像头', '情怀|钉子户|演讲'],
'声量': [22, 75],
'互动量': [33, 22]
}
)
df['话题'] = df['话题'].map(lambda x: x.split('|')) # 这里根据分隔符动态修改
df = df.explode('话题')
df.index = [i for i in range(len(df))]
print(df)
参考:https://zhuanlan.zhihu.com/p/124242604