使用 Pandas 使用冒号、逗号和排序分隔值的数据框
Posted
技术标签:
【中文标题】使用 Pandas 使用冒号、逗号和排序分隔值的数据框【英文标题】:Dataframe using Pandas delimiting values using colon, commas and sorting 【发布时间】:2022-01-01 15:22:04 【问题描述】:我有这个数据框:
C0 C1 C2
0 jjj 3
0 aaa 2
1 bbb 7
使用 Pandas 获取这个新 DataFrame 的最 Pythonic 方式是什么?
C0 C1
0 aaa:2,jjj:3
1 bbb:7
【问题讨论】:
排序的逻辑是什么?应该按C1
还是C2
排序?
你的答案是正确的......请再次提供你的答案
是的,没有删除它。
和你一样,按 C1 排序
你有什么建议,用解决方案制作一个DataFrame吗?
【参考方案1】:
我有一个与@Ch3ster 类似的方法,但管道有点不同:
(df.sort_values('C1')
.assign(C1=lambda d: d['C1']+':'+d['C2'].astype(str))
.groupby('C0', as_index=False)['C1'].apply(','.join)
)
输出:
C0 C1
0 0 aaa:2,jjj:3
1 1 bbb:7
【讨论】:
谢谢!我通常尝试制作管道,因为它们不会更改原始数据框。不过,它并不总是给出最好的解决方案,有时它更容易分成几个必要的步骤;)(顺便说一句,我对你的解决方案投了票,完全合法)【参考方案2】:您可以使用DataFrame.sort_values
对数据框进行排序。您可以使用Series.str.cat
与 sep 连接。然后 groupby 并使用str.join
。
df = df.sort_values('C1')
df["C1"].str.cat(df["C2"].astype(str), ":").groupby(df["C0"]).agg(
",".join
).to_frame().reset_index()
C0 C1
0 0 aaa:2,jjj:3
1 1 bbb:7
【讨论】:
以上是关于使用 Pandas 使用冒号、逗号和排序分隔值的数据框的主要内容,如果未能解决你的问题,请参考以下文章
将整列整数转换为字符串,在 Pandas 中使用逗号分隔千位
如何在laravel中使用逗号分隔值的列上使用'where'