python - 聚合 Pandas 数据框中的单元格/列

标签 python pandas dataframe

我有一个这样的数据框

Index Z1       Z2       Z3       Z4  
 0    A(Z1W1)  A(Z2W1)  A(Z3W1) B(Z4W2)   
 1    A(Z1W3)  B(Z2W1)  A(Z3W2) B(Z4W3)   
 2    B(Z1W1)           A(Z3W4) B(Z4W4)
 3    B(Z1W2)

我想把它转换成

Index   Z1              Z2        Z3                    Z4
 0      A(Z1W1,Z1W3)    A(Z2W1)   A(Z3W1,Z3W2,Z3W4)     B(Z4W2,Z4W3,Z4W4)    
 1      B(Z1W1,Z1W2)    B(Z2W1)     

基本上我想将不同单元格的值聚合到一个单元格,如上所示

编辑 1

实际列名是两个词或三个词的名称,而不是 A B 例如坚果黄油而不是 A

最佳答案

事情变得有趣了:-)

s=df.stack().replace({'[(|)]':' '},regex=True).str.strip().str.split(' ',expand=True)
v=('('+s.groupby([s.index.get_level_values(1),s[0]])[1].apply(','.join)+')').unstack().apply(lambda x : x.name+x.astype(str)).T
v[~v.apply(lambda x : x.str.contains('None'))].apply(lambda x : sorted(x,key=pd.isnull)).reset_index(drop=True)
Out[1865]: 
             Z1       Z2                 Z3                 Z4
0  A(Z1W1,Z1W3)  A(Z2W1)  A(Z3W1,Z3W2,Z3W4)  B(Z4W2,Z4W3,Z4W4)
1  B(Z1W1,Z1W2)  B(Z2W1)                NaN                NaN

更新 改变

#s=df.stack().replace({'[(|)]':' '},regex=True).str.strip().str.split(' ',expand=True)

s=df.stack().str.split('(',expand=True)
s[1]=s[1].replace({'[(|)]':' '},regex=True).str.strip()

关于python - 聚合 Pandas 数据框中的单元格/列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48954723/

相关文章:

python - 比 groupby、unstack then fillna 更快的替代方案

python - Pandas 到 PySpark : transforming a column of lists of tuples to separate columns for each tuple item

python - 按值和按引用数据类型的问题

Python多线程——主线程 block socket.connect

mysql - 将特定 Dataframe 列插入到多个 MySQL 表中

python - 在不同的目录中合并 pandas csv

python - 排序: 'DataFrame' object has no attribute 'sort'

python - 查找列数据框中缺失的数字 pandas

r - 对子组内 R 数据框中的数据进行排序

python - 如何找到两个 Pandas 数据帧的元素调和平均值