我有以下数据框:
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 的新手。帮助?
尝试使用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] 删除。
我来说两句