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
anumpy
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