我有一个系列,s
A
0 1.5
1 2.5
2 1.3
如何重复此列9次以创建数据框。 预期输出:
A A ... A
0 1.5 1.5 ... 1.5
1 2.5 2.5 ... 2.5
2 1.3 1.3 ... 1.3
df.shape
是(3, 9)
我可以使用pd.concat
,但这有点混乱。我尝试了np.repeat
,但是它不能与axis=1
一起使用,axis=0
不是我所需要的
谢谢
答案 0 :(得分:1)
不确定,混乱是什么意思,但是pd.concat
在这里处理得很好:
pd.concat([s for i in range(9)], axis=1)
您可以通过
keys=[f'A{i}' for i in range(9)]
到pd.concat
以创建不同的列名。
答案 1 :(得分:1)
numpy 方法:
numpy.repeat
和numpy.reshape
与pandas.DataFrame
:
import numpy as np
import pandas as pd
data = np.array(['1.5','2.5','1.3']) # numpy array
s = pd.Series(data) # pandas series
选项1,通过使用
numpy.ndarray
,numpy.repeat
和numpy.reshape
:
df = pd.DataFrame(np.repeat(data,9).reshape((3, 9)), columns=['A' for i in range(9)])
选项2,通过使用Series的值(pandas.Series的值也是numpy.ndarray):
df1 = pd.DataFrame(np.repeat(s.values,9).reshape((3, 9)), columns=['A' for i in range(9)])
选项3,具有不同的列名:
df2 = pd.DataFrame(np.repeat(s.values,9).reshape((3, 9)), columns=[f'A{i}' for i in range(9)])
Output
:选项1:
df:
A A A A A A A A A
0 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
1 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5
2 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3
选项2:
df1:
A A A A A A A A A
0 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
1 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5
2 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3
选项3:
df2:
A0 A1 A2 A3 A4 A5 A6 A7 A8
0 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
1 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5
2 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3
答案 2 :(得分:0)
您可以使用np.tile
并将其馈送到pd.DataFrame
:
res = pd.DataFrame(np.tile(df.values, (1, 10)),
columns=[f'A{i:02d}' for i in range(1, 11)])
print(res)
A01 A02 A03 A04 A05 A06 A07 A08 A09 A10
0 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
1 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5
2 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3
我建议不要重复列名,因为这可能会导致后续逻辑出现问题。
答案 3 :(得分:0)
您提到的系列可以如下创建
a = Series ({0: 1.5, 1:2.5, 2:1.3}, name='A')
要使DataFrame
包含9个重复列,代码应为
b = DataFrame([a]*9).T
.T
将DataFrame
转换为所需的形状。
由于所有列名均相同:在这种情况下为A
。您可以使用
b.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
或使用.iloc
索引器访问所需的列,如下所示。
b.iloc[:, 3] = [7.5, 8.5, 9.5]
这将替换DataFrame
答案 4 :(得分:0)
您可以尝试:
import pandas as pd
s = pd.Series ({0: 1.5, 1:2.5, 2:1.3}, name='A')
pd.DataFrame(np.tile(s, (10, 1)).T, columns=[f'A{i}' for i in range(10)])
输出
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9
0 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
1 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5
2 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3 1.3