colum 1, colum2
a,b,c 30
b,c,f 40
a,g,z 50
.
.
.
将上面的数据框与col1,2一起使用,我想使数据框的下方与col3,4的数据框相同。
另外,col1由带有逗号的值组成。 col4由col3之后的col2之和组成。
column3, column4
a 80
b 70
c 70
f 40
g 50
z 50
答案 0 :(得分:6)
使用:
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
说明:
colum2
列的第set_index
个split
创建DataFrame
stack
重塑reset_index
按列创建索引groupby
并汇总sum
另一种解决方案:
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
说明: