Pandas 在逗号分隔的列中查找平均值
Pandas finding average in a comma separated column
我想根据以逗号分隔的一列取平均值,并在另一列上取平均值。
我的文件如下所示:
ColumnA ColumnB
A, B, C 2.9
A, C 9.087
D 6.78
B, D, C 5.49
我的输出应该是这样的:
A 7.4435
B 5.645
C 5.83
D 6.135
我的代码是这样的:
df = pd.DataFrame(data.ColumnA.str.split(',', expand=True).stack(), columns= ['ColumnA'])
df = df.reset_index(drop = True)
df_avg = pd.DataFrame(df.groupby(by = ['ColumnA'])['ColumnB'].mean())
df_avg = df_avg.reset_index()
它必须在同一行附近,但无法弄清楚。
在您的解决方案中,index
按列 ColumnB
创建,以避免在 stack
和 Series.reset_index
之后丢失列值,最后添加了 as_index=False
列汇总后:
df = (df.set_index('ColumnB')['ColumnA']
.str.split(',', expand=True)
.stack()
.reset_index(name='ColumnA')
.groupby('ColumnA', as_index=False)['ColumnB']
.mean())
print (df)
ColumnA ColumnB
0 A 5.993500
1 B 4.195000
2 C 5.825667
3 D 6.135000
或 DataFrame.explode
的替代解决方案:
df = (df.assign(ColumnA = df['ColumnA'].str.split(','))
.explode('ColumnA')
.groupby('ColumnA', as_index=False)['ColumnB']
.mean())
print (df)
ColumnA ColumnB
0 A 5.993500
1 B 4.195000
2 C 5.825667
3 D 6.135000
我想根据以逗号分隔的一列取平均值,并在另一列上取平均值。
我的文件如下所示:
ColumnA ColumnB
A, B, C 2.9
A, C 9.087
D 6.78
B, D, C 5.49
我的输出应该是这样的:
A 7.4435
B 5.645
C 5.83
D 6.135
我的代码是这样的:
df = pd.DataFrame(data.ColumnA.str.split(',', expand=True).stack(), columns= ['ColumnA'])
df = df.reset_index(drop = True)
df_avg = pd.DataFrame(df.groupby(by = ['ColumnA'])['ColumnB'].mean())
df_avg = df_avg.reset_index()
它必须在同一行附近,但无法弄清楚。
在您的解决方案中,index
按列 ColumnB
创建,以避免在 stack
和 Series.reset_index
之后丢失列值,最后添加了 as_index=False
列汇总后:
df = (df.set_index('ColumnB')['ColumnA']
.str.split(',', expand=True)
.stack()
.reset_index(name='ColumnA')
.groupby('ColumnA', as_index=False)['ColumnB']
.mean())
print (df)
ColumnA ColumnB
0 A 5.993500
1 B 4.195000
2 C 5.825667
3 D 6.135000
或 DataFrame.explode
的替代解决方案:
df = (df.assign(ColumnA = df['ColumnA'].str.split(','))
.explode('ColumnA')
.groupby('ColumnA', as_index=False)['ColumnB']
.mean())
print (df)
ColumnA ColumnB
0 A 5.993500
1 B 4.195000
2 C 5.825667
3 D 6.135000