重复一系列操作以在python中创建df

时间:2018-09-03 14:36:15

标签: python pandas dataframe

我有一个系列,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不是我所需要的

谢谢

5 个答案:

答案 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.repeatnumpy.reshapepandas.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.ndarraynumpy.repeatnumpy.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

numpy.repeat

numpy.reshape

答案 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

.TDataFrame转换为所需的形状。

由于所有列名均相同:在这种情况下为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