基于列折叠Pandas数据框

bfhwhh0e  于 2022-11-20  发布在  其他
关注(0)|答案(2)|浏览(121)

下面有一个表,我将使用panda/python根据站点ID进行分组并连接到一个新字段

<!DOCTYPE html>
<html>
<style>
table, th, td {
  border:1px solid black;
}
</style>
<body>

<table style="width:100%">
  <tr>
    <th>SiteID</th>
    <th>Name</th>
    <th>Count</th>
  </tr>
  <tr>
    <td>A</td>
    <td>Conserve</td>
    <td>3</td>
  </tr>
  <tr>
    <td>A</td>
    <td>Listed</td>
    <td>5</td>
  </tr>
  
    <tr>
    <td>B</td>
    <td>Listed</td>
    <td>5</td>
  </tr>
</table>


</body>
</html>

我希望新表看起来像这样

<!DOCTYPE html>
<html>
<style>
table, th, td {
  border:1px solid black;
}
</style>
<body>

<table style="width:100%">
  <tr>
    <th>SiteID</th>
    <th>Output</th>
  </tr>
  <tr>
    <td>A</td>
    <td>There are Conserve : 3, Listed : 5 </td>

  </tr>

 
  
    <tr>
    <td>B</td>
    <td>There are Listed : 5</td>
  </tr>
</table>


</body>
</html>

我不确定要用什么代码,我用过group by。我试过这个
df = df.groupby("SiteID")["Name"].agg(";".join).reset_index()
但是我想把结果放在一个新的字段中,并使用上面的连接字符串

c2e8gylq

c2e8gylq1#

您可以使用自定义groupby.agg

out = (
 (df['Name']+': '+df['Count'].astype(str))
 .groupby(df['SiteID']).agg(', '.join)
 .reset_index(name='Output')
)

输出:

SiteID                  Output
0      A  Conserve: 3, Listed: 5
1      B               Listed: 5

如果您需要领先的“有”:

df['Output'] = 'There are ' + df['Output']
von4xj4u

von4xj4u2#

以下是实现此目的的方法:
第一个

相关问题