【问题标题】:How to merger same column values based on other column values?如何根据其他列值合并相同的列值?
【发布时间】:2020-10-24 23:52:02
【问题描述】:

如何根据其他列值在 pandas 数据框中添加新列, 例如,Id 列具有值,而列 Value 具有不同的 Id 值, 它需要像输出一样被合并。

df:

# dictionary of lists 
data = {'Id':["A", "A", "B", "B","B", "C", "D","E","E", "F", "G","G"], 
        'Value': ["10$", "2$", "30%", "43%", "12$", "43$", "27$", "40%" , 
                     "18$",np.nan,np.nan,"89%"]}

df = pd.DataFrame(data)
print(df)

    Id  Value
0   A   10$
1   A   2$
2   B   30%
3   B   43%
4   B   12$
5   C   43$
6   D   27$
7   E   40%
8   E   18$
9  F     nan
10 G    nan
11 G    89%

输出:

 Id Value
0   A   10$, 2$
1   B   30%,43%,12$
3   C   43$
4   D   27$
5   E   40%,18$
6   F    nan
7   G    89%

【问题讨论】:

  • df.groupby("Id").agg(",".join)

标签: python python-3.x pandas python-2.7


【解决方案1】:
df.groupby('Id')['Value'].apply(', '.join).reset_index()

print(df)

输出:


   Id   Value
0   A   S1, S2
1   B   S3, S3, S5
2   C   S6
3   D   S7
4   E   S8, S9

【讨论】:

  • @Christopher 我已经更新了问题,请查看。
【解决方案2】:

按 ID 列分组,使用串联连接作为聚合, 通过删除新数据框中的重复项,您将获得预期的输出

df2 = df
df2['Value'] = df.groupby(['Id'])['Value'].transform(lambda x: ','.join(x))
df2 = df2.drop_duplicates()
df2
    Id  Value
0   A   S1,S2
2   B   S3,S3,S5
5   C   S6
6   D   S7
7   E   S8,S9

【讨论】:

  • 嘿,我已经更新了问题,请查看它。
【解决方案3】:

我提议使用DataFrameGroupBy.aggregate函数:

data = {'Id':["A", "A", "B", "B","B", "C", "D","E","E"], 
        'Value': ["S1", "S2", "S3", "S3", "S5", "S6", "S7", "S8" ,"S9"]}

df = pd.DataFrame(data)

df = df.groupby(by="Id", as_index=False).agg(
    {"Value": lambda s: ", ".join(s[~s.isnull()]) if not all(s.isnull()) else np.nan})    
print(df)

  Id       Value
0  A      S1, S2
1  B  S3, S3, S5
2  C          S6
3  D          S7
4  E      S8, S9
5  F         NaN
6  G          H9

【讨论】:

  • Haure-Touze 我已经更新了问题,请查看。
  • 这里有一个新命题
  • Haure-Touze 如果我的 valueb 列包含 10%、20$、30$、50%....当我运行您的代码时,某些值的 $ 符号会被删除,为什么?跨度>
  • 函数 agg 取一个字典。 keys 表示要保留和要转换的列。这些值指示如何在聚合步骤中转换组。
  • 这里,我们只指定了“值”列,所以其他列都将被删除。在dict中添加一对键/值来管理另一列
猜你喜欢
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2020-02-19
  • 2023-01-12
相关资源
最近更新 更多