熊猫DataFrame列拆分和求和

时间:2020-08-20 10:17:18

标签: python-3.x pandas dataframe

我有一只熊猫DataFrame,如下。

import pandas as pd
import numpy as np

df = pd.DataFrame([['Bay of Plenty', 'Bell Rd, Nukuhou','Nukuhou, Bay of Plenty'],[1.0, 0.5,1.0]]).T
df.columns = ['col1','col2']

    col1    col2
0   Bay of Plenty   1
1   Bell Rd, Nukuhou    0.5
2   Nukuhou, Bay of Plenty  1

我想得到以下输出。

col1    sum
Bay of Plenty   2.0     
Nukuhou     1.5     
Bell Rd     0.5 

我尝试了以下方法。

df["splited"]=df["col1"].str.split(",")
df = (df.explode("splited").reset_index(drop=True))

    col1    col2    splited
0   Bay of Plenty   1   Bay of Plenty
1   Bell Rd, Nukuhou    0.5     Bell Rd
2   Bell Rd, Nukuhou    0.5     Nukuhou
3   Nukuhou, Bay of Plenty  1   Nukuhou
4   Nukuhou, Bay of Plenty  1   Bay of Plenty

df.groupby(['splited']).sum().reset_index() 

但这不算总和吗?

1 个答案:

答案 0 :(得分:1)

您可以split ,加上空格-,

#whitespaces
print(df["col1"].str.split(",").tolist())
[['Bay of Plenty'], ['Bell Rd', ' Nukuhou'], ['Nukuhou', ' Bay of Plenty']] 
                                ^^^                      ^^^
#no whitespaces
print(df["col1"].str.split(", ").tolist())
[['Bay of Plenty'], ['Bell Rd', 'Nukuhou'], ['Nukuhou', 'Bay of Plenty']]

df["splited"]=df["col1"].str.split(", ")
df = df.explode("splited")

df = df.groupby('splited')['col2'].sum().reset_index() 
print(df)
         splited  col2
0  Bay of Plenty   2.0
1        Bell Rd   0.5
2        Nukuhou   1.5

另一个想法是使用Series.str.strip删除尾随空格:

df["splited"]=df["col1"].str.split(",")
df = df.explode("splited")

df = df.groupby(df['splited'].str.strip())['col2'].sum().reset_index() 
print(df)
         splited  col2
0  Bay of Plenty   2.0
1        Bell Rd   0.5
2        Nukuhou   1.5

编辑:

如果可能需要在,之后将其分隔为一个空格或不包含空格,则可以使用正则表达式:

df = pd.DataFrame([['Bay of Plenty', 'Bell Rd, Nukuhou',
                    'Nukuhou,Bay of Plenty'],[1.0, 0.5,1.0]]).T
df.columns = ['col1','col2']

df["splited"]=df["col1"].str.split(",\s*")