熊猫:如何为系列中的每个值重复数据帧?

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)


Max*_*axU 4

更新:

这是@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)