使用concat:
df = pd.concat([s] * len(df.columns), 1, keys=df.columns)
print (df)
col1 col2
0 A A
1 A A
2 B B
3 C C
4 E E
或者如果需要更快的解决方案,请使用numpy.repeat + numpy.reshape:
l = len(df.columns)
df = pd.DataFrame(np.repeat(s,l ).reshape(-1,l), columns=df.columns, index=df.index)
print (df)
col1 col2
0 A A
1 A A
2 B B
3 C C
4 E E
或者更简单:
l = len(df.columns)
df = pd.DataFrame(np.column_stack([s] * l), columns=df.columns, index=df.index)
print (df)
col1 col2
0 A A
1 A A
2 B B
3 C C
4 E E
时间安排:
np.random.seed(123)
L = list('abcdefghijklmno')
s = pd.Series(np.random.choice(L, 100))
df = pd.DataFrame(np.random.randint(100, size=(100, 100))).add_prefix('col')
print (df)
In [161]: %timeit pd.concat([s] * len(df.columns), 1, keys=df.columns)
100 loops, best of 3: 2.84 ms per loop
In [162]: %timeit pd.DataFrame(np.repeat(s.values,len(df.columns)).reshape(-1,len(df.columns)), columns=df.columns, index=df.index)
1000 loops, best of 3: 199 µs per loop
In [163]: %timeit pd.DataFrame(np.column_stack([s] * len(df.columns)), columns=df.columns, index=df.index)
1000 loops, best of 3: 1 ms per loop
In [164]: %timeit pd.DataFrame({k : s for k in df.columns})
100 loops, best of 3: 2.33 ms per loop