【问题标题】:How to average DataFrame row with another row only if the first row is a substring of other next row仅当第一行是其他下一行的子字符串时,如何将 DataFrame 行与另一行平均
【发布时间】:2020-08-27 18:09:18
【问题描述】:

我有一个名为“数据”的数据框:

USER    VALUE
XOXO      21
ABC-1      2
ABC-1B     4
ABC-2      4
ABC-2B     6
PEPE      12

我想使用第一个 USER 名称将 'ABC-1' 和 'ABC-1B' 组合成一行,然后将这两个值取平均值以到达此处:

USER    VALUE
XOXO      21
ABC-1      3
ABC-2      5
PEPE      12

数据框可能不按顺序排列,并且其中还有其他不相关的值,不需要平均。我只想平均'XXX-X'在'XXX-XB'中的两行

data = pd.DataFrame({'USER':['XOXO','ABC-1','ABC-1B','ABC-2','ABC-2B', 'PEPE'], 'VALUE':[21,2,4,4,6,12]})

【问题讨论】:

    标签: python pandas dataframe wildcard matching


    【解决方案1】:

    我们试试吧,

    df.USER = df.USER.str.replace('(-\d)B', r"\1")
    df = df.groupby("USER", as_index=False, sort=False).VALUE.mean()
    
    print(df)
    

        USER  VALUE
    0   XOXO     21
    1  ABC-1      3
    2  ABC-2      5
    3   PEPE     12
    

    【讨论】:

    • 谢谢!你能解释一下替换里面发生了什么吗?我以前从未在参数中看到过这些东西
    • @stackoverflow \1 is equivalent to re.search(...).group(1),所以 (-\d)B 将匹配 -1B 替换为 -1 第一个组值。
    • 另外,运行它不会平均/合并行:data = pd.DataFrame({'USER':['XOXO','ABC-1','ABC-1B','ABC-2','ABC-2B', 'PEPE'], 'VALUE':[21,2,4,4,6,12]}) data.USER = data.USER.str.replace('(-\d)B', r"\1") data.groupby("USER", as_index=False, sort=False).VALUE.mean() print(data) 但是它确实将名称更改为相同的@sushanth
    • @stackoverflow,如果你可以发布一个新问题而不是扩展这个问题会更好。
    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2020-11-10
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多