Reindex Pandas 系列不区分大小写(组合匹配)

Reindex Pandas Series case insensitive (Combining matches)

我有一个包含字符串索引和整数值的 pandas 系列:(我的实际系列有 >1000 个条目)

Count
apple 1
bear 2
cat 3
Apple 10
pig 20
Cat 30
ApPlE 100

我想re-index所有标题。

Count
Bear 2
Apple 111
Pig 20
Cat 33

顺序无关紧要。

我想出了如何用字典和循环来做到这一点。

miXedCaseSeRies = pd.Series({"apple": 1, "bear": 2  ,"cat": 3,"Apple" : 10, "pig": 20, "Cat":30 , "ApPle":100 })
tcDict ={}
for ind,val in miXedCaseSeRies.iteritems():
    ind = ind.lower()
    if ind in tcDict.keys():
        tcDict[ind] = tcDict[ind]+val 
    else:
        tcDict[ind] = val

Titlecaseseries = pd.Series(tcDict)

...但是这样的回答:How to iterate over rows in a DataFrame in Pandas(剧透:“不要”)让我为没有找到更好的方法而感到内疚。
建议?

您可以仅使用 string.captialized() 将索引重命名为第一个字符大写,然后使用 groupby 索引和聚合求和函数

df = df.rename(index=lambda x: x.capitalize())
df = df.groupby(df.index).agg({'Count': 'sum'})
# or
df = df.groupby(df.index)['Count'].agg('sum').to_frame()
print(df)

       Count
Apple    111
Bear       2
Cat       33
Pig       20

假设您使用系列

miXedCaseSeRies = pd.Series({"apple": 1, "bear": 2  ,"cat": 3,"Apple" : 10, "pig": 20, "Cat":30 , "ApPle":100 })

miXedCaseSeRies = miXedCaseSeRies.rename(index=lambda x: x.capitalize())
df = miXedCaseSeRies.to_frame('Count').groupby(miXedCaseSeRies.index).agg({'Count': 'sum'})