我有DF1
,类似于:
A B
X BLA, FOO XY, ZY, DW
Y BAR, BLA FOO, DW
Z UVH, DD RATM,QOTA
DF的每个元素都是一个具有以下结构的字符串:BLA, FOO, BAR, ...
。我想根据单个元素将其重新整理为DF2
,将其转换为X
和A
的关联:
A B
BLA X, Y
FOO X Y
XY X
...
如您所见,DF1
的每个元素都显示了索引和列之间的关联。有没有更实际的方法来逐行和逐列读取?或者,您如何从index
获得column
和pd.DF.applymap()
?
提前致谢
答案 0 :(得分:4)
使用:
DataFrame
split
和stack
stack
重塑系列 - 所有拆分值都在一列MultiIndex
reset_index
转换为列
MultiIndex
的重复项对进行分组,对重复项进行汇总join
unstack
rename_axis
df1 = (df.apply(lambda x: x.str.split(',\s+', expand=True).stack())
.stack()
.reset_index(drop=True, level=1)
.reset_index(name='val')
.groupby(['val','level_1'])['level_0']
.apply(', '.join)
.unstack(fill_value='')
.rename_axis(None)
.rename_axis(None, 1))
谢谢,Zero提供类似解决方案:
df1 = (df.stack()
.str.split(', ', expand=True)
.stack()
.reset_index(name='val')
.groupby(['val','level_1'])['level_0']
.apply(', '.join)
.unstack(fill_value='')
.rename_axis(None)
.rename_axis(None, 1))
print (df)
A B
BAR Y
BLA X, Y
DD Z
DW X, Y
FOO X Y
QOTA Z
RATM Z
UVH Z
XY X
ZY X
df1 = (df.stack()
.str.split(', ', expand=True)
.stack()
.reset_index()
.pivot_table(index=0,
columns='level_1',
values='level_0',
aggfunc=','.join,
fill_value='')
.rename_axis(None)
.rename_axis(None, 1))