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'   '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() 会删除第二个类似类型的行。有没有一些方便的方法来组合单元格(字符串)?提前致谢。

最佳答案

使用groupby/agg', '.join 作为聚合器:

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

关于python - 如果值相同,则合并 pandas 数据框单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38728705/

相关文章:

python - Django:AppRegistryNotReady()

python - 将 pandas DataFrame 中的多列删除到一行

python - 将(列表)应用于 Pandas 中的多列

python - 如何从 Pandas HDF 存储中读取 nrows?

python - 从 Jupyter Notebook 中安装 pip 包不起作用

python - 关于反序列化一些数字的问题(错误??)

python - 从一大组 python 列表中,找到具有最多共同元素的 2 个列表 - Python/Pandas

python - 数据框并在 for 循环中更新新的列值

python - 如何在 Scikit-learn 中使用 `Dirichlet Process Gaussian Mixture Model`? (n_components?)

python - 在 Keras 中使用 colocate_with