当前位置: 首页 > 知识库问答 >
问题:

如何在python dataframe上连接同一列中的相同行名称

咸育
2023-03-14

我有这样一个简单的数据框架

df = pd.DataFrame({'class':['a','b','c','d','e'],
                  'name':['Adi','leon','adi','leo','andy'],
                  'age':['9','8','9','9','8'],
                   'score':['40','90','35','95','85']})

结果是这样的

 class  name   age  score
    a   Adi     9   40
    b   leon    8   90
    a   adi     9   35
    d   leo     9   95
    e   andy    8   85

当他只有一个人,而且分数是75分,而不是40分和35分时,我如何将名为“Adi”的行与“Adi”的行组合在同一列中

共有2个答案

孙琨
2023-03-14

删除重复项()是使用熊猫的最佳方式

df['name'] = df['name'].str.lower()
df['score'] = df['score'].astype(int)
df['score'] = df['score'].groupby(df['name']).transform(sum)
df.drop_duplicates(subset='name',keep='first',inplace=True)

输出:

  class  name age  score
0     a   adi   9     75
1     b  leon   8     90
3     d   leo   9     95
4     e  andy   8     85

如果设置keep='last',您将获得此输出:

  class  name age  score
1     b  leon   8     90
2     c   adi   9     75
3     d   leo   9     95
4     e  andy   8     85
柳胡媚
2023-03-14

你可以使用熊猫。数据帧 groupby熊猫。数据帧 在第一次将名称列小写后聚合

import pandas as pd

df = pd.DataFrame({
    'class': ['a', 'b', 'c', 'd', 'e'],
    'name': ['Adi', 'leon', 'adi', 'leo', 'andy'],
    'age': ['9', '8', '9', '9', '8'],
    'score': ['40', '90', '35', '95', '85']
})
df['name'] = df['name'].str.lower()
df['score'] = df['score'].astype(int)
aggregate_funcs = {
    'class': lambda s: ', '.join(set(s)),
    'age': lambda s: ', '.join(set(s)),
    'score': sum
}
df = df.groupby(df['name']).aggregate(aggregate_funcs)
print(df)

输出:

     class age  score
name                 
adi   c, a   9     75
andy     e   8     85
leo      d   9     95
leon     b   8     90
 类似资料:
  • 如果我将这两个表连接起来,并执行如下操作,我可以concat但不是基于表r(因为新列的第一行是1,但第二行应该只有2) 我必须在上面的查询中的select之前应用filter,但我不确定如何在withColumn中为每一行执行此操作。 下面的东西,如果可能的话。

  • 问题内容: 我的MySQL数据库中有这些表: 通用表: Facebook表: 首席表: 基本上,常规表包含一些( 显然 )常规数据。基于generalTable.scenario,您可以在其他两个表中查找更多详细信息,这些表在某些熟悉的列中(例如,expiresAt),而在其他一些列中则不然。 我的问题是,如何仅通过一个查询就可以获取generalTable和正确的明细表的联接数据。 所以,我想这

  • 我得到了一个表从SELECT查询1如下从SQL服务器: 我从SQL Server的SELECT query 2中获得了一个表,如下所示: 我想将这些SELECT查询加入到一个SELECT查询中,如下所示: 我试着这样: 但它不起作用,这不是我想要加入的实际表。 基本上,我想连接两个具有相同列名但它们之间没有公共值的SELECT查询。我想使用连接表中的SELECT查询。 提前谢谢你。

  • 我正在运行以下JOOQ查询: table和joinTable都有id作为主键名称,但最终获取实体类包含joinTable的id和table的其余列。如果我重新排序表,结果相似,我有表的ID和joinTable的其余列。

  • 问题内容: 我有以下代码: 我希望两条execute()行可以重用同一连接。但是,日志输出显示: 上面的例子运行得很快,但是我有一段更大的代码,基本上做同样的事情,并且挂了很久。我从来没有收到错误,但是它使代码运行非常缓慢。我可以以某种方式重构以上代码以仅使用相同的连接吗? 谢谢 问题答案: 这是使用Apache DBCP的示例: log4j输出为:-

  • 问题内容: 我有两个表,它们共享相似的列名。 查询是: 结果放入一个数组中: 一旦我添加了第二张表,我注意到该表正在使用tableb的数据。 问题 (S):如何存储两个列,所以不起作用。我的猜测可能是我需要对查询中的每个结果进行别名化。有什么建议? 我是否应该避免将来再提供列名 ? 问题答案: 你的猜测是对的。您需要为各列创建一个,以便可以唯一地获取它, 那你现在可以打电话