使用pandas-python
:
我有一个现有的数据框,可以说
Dataframe A (18 rows, 40 columns)
。
我创建了一个可以命名为Dataframe B (18 rows, 127 columns)
的新数据框(这并不完全重要)。
我想遍历Dataframe A
的每一列(或不遍历),并将每一列复制到Dataframe B
...除了,我想在{的每一列上复制3遍{1}},每4列从0开始。
示例:
如果前5个A
中的col_headers
是A
,我想 关联的[0,1,2,3,4]
具有与col_headers
相同的值,如下所示:B
我正在尝试使用内置的potentailly函数来执行这样的过程,以查看是否存在快速循环或不循环的方法。我已经想出了一种方法来进行循环,但是如果可能的话,我试图避免进行繁重的计算。
答案 0 :(得分:3)
首先按所需顺序创建列标识符列表。然后使用pd.DataFrame.iloc
。请注意,iloc
与NumPy一样,接受重复的整数以按位置进行索引。
这是一个演示:
from itertools import chain
df = pd.DataFrame([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]],
columns=[0, 1, 2, 3, 4])
L = list(chain.from_iterable([[j]*3 if i%4 else [j] \
for i, j in enumerate(df.columns)]))
res = df.iloc[:, L]
print(res)
0 1 1 1 2 2 2 3 3 3 4
0 1 2 2 2 3 3 3 4 4 4 5
1 6 7 7 7 8 8 8 9 9 9 10
答案 1 :(得分:1)
尝试一下
import pandas as pd
import numpy as np
df1=pd.DataFrame(np.random.randint(1,100,size=(18,40)))
df1_cols=df1.columns.values
req_cols= sum([[col]*3 if col%4!=0 else [col] for col in df1_cols],[])
res=pd.concat(df2,df1[req_cols])
# req_cols:
[0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39]
说明:
您需要首先将一列纳入列表。然后在%4!= 0时为您的问题重复3次。因此req_cols
包含您需要的列。然后从df1中切片。最后要复制的内容与df2合并。您将成功获得理想的结果。