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'})
我有一个包含字符串索引和整数值的 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'})