【问题标题】:Splitting a Pandas Column and Summing the Values拆分 Pandas 列并对值求和
【发布时间】:2021-07-16 16:44:01
【问题描述】:

我有一个看起来像这样的熊猫数据框:

Time       Value
10:00       1|2
11:00       10|20|30
12:00       20|32
13:00       3|4|6|8|9

我想要的是另一个列“结果”,它将在“值”列上具有整数值的总和。结果将如下所示:

Time       Value         Results
10:00       1|2             3
11:00       10|20|30       60
12:00       20|32          52
13:00       3|4|6|8|9      30

最简单的方法是什么?

【问题讨论】:

    标签: python pandas dataframe split jupyter-notebook


    【解决方案1】:

    通过pd.eval()尝试:

    df['Results']=pd.eval(df['Value'].str.replace('|','+',regex=True))
    #OR
    df['Results']=df['Value'].str.replace('|','+',regex=True).map(pd.eval)
    

    按照@Jon Clements 的建议,不使用pd.eval() 的其他方式:

    df['Results'] =[sum(int(n) for n in val.split('|')) for val in df['Value']]
    

    【讨论】:

    • 或者为了谨慎而避免 eval 错误 - 无聊:df['Results'] = [sum(int(n) for n in val.split('|')) for val in df['Value']]
    • @JonClements 感谢先生的建议,但先生,它比pd.eval() 4 *solwer@
    • 你是如何测量的...?当我计时时,list-comp 以微秒为单位,而 eval 以微秒为单位......它们有很大的不同......(我让 eval 慢了 1000 倍以上......)
    • 我认为第二个“微秒”应该是“毫秒”@JonClements
    • 你说得对亨利......我的大脑打了个嗝什么的:p