因此,尝试对费用数据进行一些分析。导入了一个csv,最初的groupby是:
group_df = df.groupby('Who', as_index=False).sum()
我注意到一些供应商使用略有不同的名称,并希望将它们合并为整体分组的一部分。匹配的文本在“谁”字段中并不总是位于同一位置,并且至少在到目前为止,我发现“谁”中的分组依据的术语根本不相似(“ Rathbone”和“ Yering”站”。
Who Amount
0 DE BORTOLI WINES DIXONS CREEK -29.54
1 DE BORTOLI WINES RE DIXONS CREEK -20.50
2 DE BORTOLI WINES P/L DIXONS CREEK -22.50
3 DE BORTOLI WINES PTY L BILBUL -91.00
4 Ezard@Levantine Hill Coldstream -31.30
5 Ezard@LevantineHill Coldstream -21.10
6 RATHBONE WINE GROUP PORT MELBOURN -20.20
7 YERING STATION YARRA GLEN -17.05
8 YERING STATION YARRA GREEN -31.00
columns: Index(['Who', 'Amount'], dtype='object')
我想要的输出:
Who Amount
0 DE BORTOLI WINES DIXONS CREEK -163.54 # all rows containing 'De Bortoli'
1 Ezard@Levantine Hill Coldstream -52.40 # all rows containing 'Ezard@'
2 RATHBONE WINE GROUP PORT MELBOURN -20.20 # all rows containing 'Rathbone' or 'Yering Station'
columns: Index(['Who', 'Amount'], dtype='object')
我一直在研究熊猫文档,网站示例和堆栈交换,但我无法找到一种不会引发某种错误的解决方案。
我希望能够在可能的情况下指定组“谁”(我认为这使这个问题与我所看到的其他示例有所不同)。
我还想知道是否应该全部通过一两个步骤-即两次通过是在数据帧上进行初始通用分组,然后将变体连接到groupby输出上。
我什至是采用正确的方法-在尝试进行分组之前对数据框行进行一些合并会更好吗?
感谢您的帮助!
答案 0 :(得分:0)
一种方法是创建一个字典,其中包含诸如DE BORTOLI
之类的查找键,并定义诸如DE BORTOLI WINES DIXONS CREEK
之类的统一值。然后,您可以为此分层名称创建一个临时列,以使列Who
中的信息不会丢失,并按以下新列进行分组:
#create dictionary how to translate patterns into categories
#the pattern .* is used as a regex pattern meaning any character before or after this string allowed
transl = {".*DE BORTOLI.*": "DE BORTOLI WINES DIXONS CREEK", ".*Ezard@.*": "Ezard@Levantine Hill Coldstream", ".*RATHBONE.*": "RATHBONE AND YERING", ".*YERING.*":"RATHBONE AND YERING"}
#create column with stratified name for grouping
df["strat"] = df["Who"].replace(to_replace = transl, regex = True)
#group and sum
group_df = df.groupby("strat", as_index = False).sum()
print(group_df)
样本输出
strat Amount
0 DE BORTOLI WINES DIXONS CREEK -163.54
1 Ezard@Levantine Hill Coldstream -52.40
2 RATHBONE AND YERING -68.25