【问题标题】:Dataframe using Pandas delimiting values using colon, commas and sorting使用 Pandas 使用冒号、逗号和排序分隔值的数据框
【发布时间】: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吗?

标签: python pandas dataframe sorting delimiter


【解决方案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

【讨论】:

    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2017-06-22
    相关资源
    最近更新 更多