而不是例如用group_by计算总和我想连接同一组中的所有行。而不是sum(),下面的代码应该只是组合/连接行。如果每组有5行,则新数据帧将具有5倍的列(每列x 5)
实施例: 这是我现在拥有的数据框架。
Index Pool B C D E
70 Pool1 8.717402 7.873173 16.029238 8.533174
71 Pool1 7.376365 6.228181 9.272679 7.498993
72 Pool2 8.854857 10.340896 9.218947 8.670379
73 Pool2 11.509130 8.571492 19.363829 14.605199
74 Pool3 14.780578 7.405982 9.279374 13.551686
75 Pool3 7.448860 11.952275 8.239564 12.264440
我想这样:
Index Pool B1 C1 D1 E1 B2 C2 D2 E2
70 Pool1 8.717402 7.873173 16.029238 8.533174 7.376365 6.228181 9.272679 7.498993
71 Pool2 8.854857 10.340896 9.218947 8.670379 11.509130 8.571492 19.363829 14.605199
72 Pool3 14.780578 7.405982 9.279374 13.551686 7.448860 11.952275 8.239564 12.264440
我会为您提供示例代码,但不知道。如果我只是将行总和,我会使用:
t.groupby(['pool']).sum()
但我不想组合行并保留列结构,我想将行连接到同一组。
答案 0 :(得分:1)
你可以尝试:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'Pool': ['a', 'a', 'b', 'b', 'c'], 'B':[1, 2, 3, 4, 5], 'C':[1,2,3,4,5]})
gd = df1.groupby('Pool')
def comb2(x):
rslt = dict()
for col in x.columns:
rslt[col]=x[col].tolist()
return pd.Series(rslt)
rslt = gd.apply(comb2)
rslt = rslt.drop('Pool', axis=1)
finaldf = pd.DataFrame()
for col in rslt.columns:
tempdf = rslt[col].apply(lambda x: pd.Series(x))
tempdf.columns = [col+str(i+1) for i in range(len(tempdf.columns))]
finaldf = pd.concat([finaldf, tempdf],axis=1)
print(finaldf)
Output:
B1 B2 C1 C2
Pool
a 1 2 1 2
b 3 4 3 4
c 5 NaN 5 NaN