Pra*_*tha 4 python merge numpy dataframe pandas
我有一个数据帧(df):
A B
1 a
2 b
3 c
Run Code Online (Sandbox Code Playgroud)
还有一系列:S = pd.Series(['x','y','z'])我想为系列中的每个值重复数据帧df.预期的结果是这样的:结果:
S A B
x 1 a
y 1 a
z 1 a
x 2 b
y 2 b
z 2 b
x 3 c
y 3 c
z 3 c
Run Code Online (Sandbox Code Playgroud)
我如何实现这种输出?我正在考虑合并或加入,但合并会给我一个内存错误.我正在处理一个相当大的数据帧和系列.谢谢!
Vai*_*ali 11
使用numpy,假设你有不同长度的系列和df
s= pd.Series(['X', 'Y', 'Z', 'A']) #added a character to s to make it length 4
s_n = len(s)
df_n = len(df)
pd.DataFrame(np.repeat(df.values,s_n, axis = 0), columns = df.columns, index = np.tile(s,df_n)).rename_axis('S').reset_index()
S A B
0 X 1 a
1 Y 1 a
2 Z 1 a
3 A 1 a
4 X 2 b
5 Y 2 b
6 Z 2 b
7 A 2 b
8 X 3 c
9 Y 3 c
10 Z 3 c
11 A 3 c
Run Code Online (Sandbox Code Playgroud)
更新:
这是@A-Za-z 的解决方案的一些改变,可能会节省更多内存,但速度较慢:
x = pd.DataFrame(index=range(len(df) * len(S)))
for col in df.columns:
x[col] = np.repeat(df[col], len(s))
x['S'] = np.tile(S, len(df))
Run Code Online (Sandbox Code Playgroud)
旧的错误答案:
In [94]: pd.concat([df.assign(S=S)] * len(s))
Out[94]:
A B S
0 1 a x
1 2 b y
2 3 c z
0 1 a x
1 2 b y
2 3 c z
0 1 a x
1 2 b y
2 3 c z
Run Code Online (Sandbox Code Playgroud)