一、根据某列值为key,整合其他列值
直接上例子:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
'data1': range(7)})
df1
整合,根据key值,对于同一个key值,有多个data1与之对应,将多个data1之间用分隔符\t连接,作为一个元素:
ex_data = df1.groupby(['key'], as_index=True)['data1'].apply(lambda x :'\t'.join(list([str(i) for i in x])))
ex_data
type(ex_data)
pandas.core.series.Series
exx_data = pd.DataFrame(ex_data)
exx_data.columns
Index([‘data1’], dtype=‘object’)
exx_data
exx_data.reset_index(inplace=True)
exx_data
如果此时有其他列的值需要保留
例如:
df1 = pd.DataFrame({'key': ['b','b','a','c','a','a','b'],
'data1': [0, 0, 2, 3, 4, 5, 6],
'data2': [1, 1, 2, 3, 2, 2, 1]})
df1
现在我们想根据key聚合data1,如果能保证 key 和data2是一一对应的,且我们想保留data2,此时得到:
我们需要对df1去掉data1列然后去重:
df1.drop(['data1'], inplace=True, axis = 1)
df1.drop_duplicates(['key', 'data2'], inplace=True)
df1
将df1 和exx_data进行merge :
df_new = df_ex.merge(df1, on = 'key')
df_new
二、拆分某列值增加多行数据
其实就是一过程的逆过程:
x1 = exx_data['data1'].str.split('\t', expand=True)
x1
x2 = x1.stack()
x2
x3 = x2.reset_index(level = 1, drop = True)
x3
x4 = x3.rename('data_x')
x4
x5 = exx_data.join(x4)
x5
一步到位:
x5 = exx_data.join(data['data1'].str.split('\t', expand=True).stack().reset_index(level=1, drop=True).rename('data_x'))
参考:
https://cloud.tencent.com/developer/ask/28278