gpt4 book ai didi

python - 基于公共(public)字段将两行合并为一

转载 作者:行者123 更新时间:2023-12-04 10:43:08 26 4
gpt4 key购买 nike

我有包含以下数据的数据框:

+----------+------------+-------------+---------------+----------+
|id |name |predicted |actual |yyyy_mm_dd|
+----------+------------+-------------+---------------+----------+
| 215| NirPost| null|100.10023 |2020-01-10|
| null| NirPost| 57145|null |2020-01-10|
+----------+------------+-------------+---------------+----------+

我想根据 name 将这两行合并为一。 .这个df是我限制在一家公司和一天的查询的结果。在真实数据集中,有 70~ 家公司每天都有数据。我想将此数据作为单行重写到新表中。

这是我想要的输出:
+----------+------------+-------------+---------------+----------+
|id |name |predicted | actual |yyyy_mm_dd|
+----------+------------+-------------+---------------+----------+
| 215| NirPost| 57145 |100.10023 |2020-01-10|
+----------+------------+-------------+---------------+----------+

我试过这个:
df.replace('null','').groupby('name',as_index=False).agg(''.join)

但是,这会输出我原来的 df 但带有 NaN而不是 null .
`df.dtypes`:

id float64
name object
predicted float64
actual float64
yyyy_mm_dd object
dtype: object

最佳答案

您如何显式传递 groupby 中的所有列?与 max以便消除空值?

import pandas as pd
import numpy as np
data = {'id':[215,np.nan],'name':['nirpost','nirpost'],'predicted':[np.nan,57145],'actual':[100.12,np.nan],'yyyy_mm_dd':['2020-01-10','2020-01-10']}
df = pd.DataFrame(data)

df = df.groupby('name').agg({'id':'max','predicted':'max','actual':'max','yyyy_mm_dd':'max'}).reset_index()
print(df)
返回:
      name     id  predicted  actual  yyyy_mm_dd
0 nirpost 215.0 57145.0 100.12 2020-01-10
当然,既然您有更多数据,您可能应该考虑在 groupby 中添加其他内容。以免删除太多行,但是对于您提供的示例数据,我相信这是解决问题的一种方法。
编辑:
如果所有列都被命名为 max_original_column_name那么你可以简单地使用这个:
df.columns = [x[:-4] for x in list(df)]
使用列表理解,您正在创建一个列表,该列表从 _max 中的每个值中删除最后 4 个字符(即 list(df),这是列名称的列表。最后,您将其分配给 df.columns =

关于python - 基于公共(public)字段将两行合并为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59840525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com