Python 如果值相同,则合并数据帧单元格
我试图创建一个新的数据框架,如果一个“类型”出现不止一次,那么这些行的“国家”单元格和“年份”单元格的内容将组合在一行中(“如何”列的行为类似于“类型”列:如果类型相似,则如何也一样) 我的pd数据框如下所示,df:Python 如果值相同,则合并数据帧单元格,python,pandas,Python,Pandas,我试图创建一个新的数据框架,如果一个“类型”出现不止一次,那么这些行的“国家”单元格和“年份”单元格的内容将组合在一行中(“如何”列的行为类似于“类型”列:如果类型相似,则如何也一样) 我的pd数据框如下所示,df: type country year how 0 't1' 'UK' '2009' 'S' 1 't2' 'GER' '2010' 'D' 2 't2' 'USA' '2011' 'D' 3 't3' 'AUS'
type country year how
0 't1' 'UK' '2009' 'S'
1 't2' 'GER' '2010' 'D'
2 't2' 'USA' '2011' 'D'
3 't3' 'AUS' '2012' 'F'
4 't4' 'CAN' '2013' 'R'
5 't5' 'SA' '2014' 'L'
6 't5' 'RU' '2015' 'L'
df2应该是这样的:
type country year how
0 't1' 'UK' '2009' 'S'
1 't2' 'GER, USA' '2010, 2011' 'D'
2 't3' 'AUS' '2012' 'F'
3 't4' 'CAN' '2013' 'R'
4 't5' 'SA, RU' '2014, 2015' 'L'
我很肯定,一个关于“类型”(或类型和方式)的小组是必要的。例如,使用first()将删除第二个类似类型的行。是否有一些简便的方法来代替合并单元格(字符串)?提前感谢。与',一起使用。加入作为聚合器:
import pandas as pd
df = pd.DataFrame({'country': ['UK', 'GER', 'USA', 'AUS', 'CAN', 'SA', 'RU'],
'how': ['S', 'D', 'D', 'F', 'R', 'L', 'L'],
'type': ['t1', 't2', 't2', 't3', 't4', 't5', 't5'],
'year': ['2009', '2010', '2011', '2012', '2013', '2014', '2015']})
result = df.groupby(['type','how']).agg(', '.join).reset_index()
屈服
type how country year
0 t1 S UK 2009
1 t2 D GER, USA 2010, 2011
2 t3 F AUS 2012
3 t4 R CAN 2013
4 t5 L SA, RU 2014, 2015
获取每个单元格中的列表而不是字符串
def proc_df(df):
df = df[['country', 'year']]
return pd.Series(df.T.values.tolist(), df.columns)
df.groupby(['how', 'type']).apply(proc_df)