Pandas 创建独特的行和拆分列

加拉诺斯

我有以下数据框:

name    channel    value
a1      branch     150
a2      online     200
a1      branch     120
a1      online     100
a3      branch     120
a3      branch     200

或者:

df = pd.DataFrame({"name": ["a1", "a2", "a1", "a1", "a3", "a3"], 
                   "channel": ["branch", "online", "branch", "online", "branch", "branch"], 
                   "value":[150, 200, 120, 100, 120, 200]})

我想创建每行只有 1 个唯一名称的新数据框,然后在单独的列上创建每个唯一的通道名称,其值等于该通道的总数。IE:

name    channel_branch    channel_online     branch_value     online_value
a1      yes               yes                270              100
a2      no                yes                0                200
a3      yes               no                 320              0

我正在考虑通过使用以下方法从 df 创建唯一的数据框来进行合并:

df_unique = pd.DataFrame.drop_duplicates(df, subset="name")

然后使用以下方法进行左合并:

merged = pd.merge(df_unique, df, on="name", how="left")

但这并不符合我想要实现的目标。我是 Python 和 Pandas 的新手。帮助?

U12-转发

尝试使用pivot_table

>>> df = df.pivot_table('value', 'name', 'channel', aggfunc=sum, fill_value=0).add_suffix('_value').reset_index().rename_axis(columns=None)
>>> df.join(df.select_dtypes(include=np.int64).gt(0).replace({1: 'Yes', 0: 'No'}).add_prefix('channel_'))
  name  branch_value  online_value channel_branch_value channel_online_value
0   a1           270           100                  Yes                  Yes
1   a2             0           200                   No                  Yes
2   a3           320             0                  Yes                   No
>>> 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章