数据帧中有多个带逗号的值

2024-04-26 20:40:01 发布

您现在位置:Python中文网/ 问答频道 /正文

colum 1, colum2 a,b,c 30 b,c,f 40 a,g,z 50 . . . 使用上面的dataframe和col1,2,我希望dataframe和下面的dataframe和col3,4一样。 此外,col1由带逗号的值组成。col4由col3后面的col2之和组成。 column3, column4 a 80 b 70 c 70 f 40 g 50 z 50


Tags: dataframecol2col3col1逗号col4column4column3
1条回答
网友
1楼 · 发布于 2024-04-26 20:40:01

用途:

df = (df.set_index('colum2')['colum1']
        .str.split(',', expand=True)
        .stack()
        .reset_index(name='column3')
        .groupby('column3', as_index=False)['colum2']
        .sum()
        .rename(columns={'colum2':'column4'})
      )
print (df)
  column3  column4
0       a       80
1       b       70
2       c       70
3       f       40
4       g       50
5       z       50

解释:

  1. 第一个^{}colum2
  2. 通过^{}创建DataFrame
  3. 重塑^{}
  4. ^{}按列创建索引
  5. ^{}和聚合sum
  6. 如果需要,最后重命名列

另一种解决方案:

from itertools import chain

a = df['colum1'].str.split(',')
lens = a.str.len()

df = pd.DataFrame({
    'column3' : list(chain.from_iterable(a)), 
    'column4' : df['colum2'].repeat(lens)
}).groupby('column3', as_index=False)['column4'].sum()

print (df)
  column3  column4
0       a       80
1       b       70
2       c       70
3       f       40
4       g       50
5       z       50

解释:

  1. ^{}创建列表
  2. 通过^{}获得lsit的长度
  3. 最后^{}列并展平colum1
  4. ^{}和聚合sum

相关问题 更多 >