Python 数据帧重塑转换

Python 数据帧重塑转换,python,pandas,Python,Pandas,我有这样一个数据帧: import pandas df=pandas.DataFrame([['a','b'],['a','c'],['b','c'],['b','d'],['c','f']],columns=['id','key']) print(df) id key 0 a b 1 a c 2 b c 3 b d 4 c f 我想要的结果是: id key 0 a b,c 1 b c,d 2 c f 我尝试使用pivot函数,但

我有这样一个数据帧:

import pandas
df=pandas.DataFrame([['a','b'],['a','c'],['b','c'],['b','d'],['c','f']],columns=['id','key'])
print(df)

  id key
0  a   b
1  a   c
2  b   c
3  b   d
4  c   f
我想要的结果是:

   id  key
0  a  b,c
1  b  c,d
2  c    f
我尝试使用pivot函数,但没有得到结果。R中的cast包似乎解决了这个问题。谢谢

您需要使用
应用
加入

df1 = df.groupby('id')['key'].apply(','.join).reset_index()
print (df1)
  id  key
0  a  b,c
1  b  c,d
2  c    f
a
numpy
approach

g = df.id.values
k = df.key.values
a = g.argsort(kind='mergesort')
gg = g[a]
kg = k[a]

w = np.where(gg[:-1] != gg[1:])[0]

pd.DataFrame(dict(
        id=gg[np.append(w, len(a) - 1)],
        key=[','.join(l.tolist()) for l in np.split(kg, w + 1)]
    ))

  id  key
0  a  b,c
1  b  c,d
2  c    f

速度与直觉的对比

g = df.id.values
k = df.key.values
a = g.argsort(kind='mergesort')
gg = g[a]
kg = k[a]

w = np.where(gg[:-1] != gg[1:])[0]

pd.DataFrame(dict(
        id=gg[np.append(w, len(a) - 1)],
        key=[','.join(l.tolist()) for l in np.split(kg, w + 1)]
    ))

  id  key
0  a  b,c
1  b  c,d
2  c    f