df = pd.DataFrame({'col': [f'{c}{i%32+1}' if c=='column' else f'{c}{i+1}'
for i in range(50_000) for c in ['column', 'value']]})
N = 32
a = df['col'].to_numpy()
values = a[1::2]
out = pd.DataFrame(np.pad(values, (0, len(values)-len(values)//N*N),
constant_values=np.nan).reshape((-1, N)),
columns=a[:2*N:2])
With 100000 rows there will be some repetition of column names and values will need slicing into multiple lists,那么使用32列可能不是显示数据的正确方法。
Repeating for 32 columns over about 100,000 rows.
I would like to iterate over this data frame to create a new data frame with:
Column 1 Column 2 Column 3
Value Value Value
I have tried converting to a dictionary to enable matching on the keys but have failed
3条答案
按热度按时间u4dcyp6a1#
由于您有100,000行,因此将存在重复的列名,并且还需要将值分组到行中。您可以提取唯一的列名,然后根据列名的数量将值分块。例如:
样本输出:
注意为了示例代码的目的,我选择了一种简单的方法来分块值。为了获得最佳性能,您可能需要使用this Q&A中描述的方法之一。
mnemlml82#
假设列为“col”,使用简单的切片:
输出:
重复值
考虑另一个示例:
如果您有重复的列名,那么
pivot
可能有用:输出:
使用numpy整形
如果列名总是按照逻辑顺序(1,2,3,...,32,1,2,3,...),那么
reshape
将是一个很好的选择:bhmjp9jg3#
With 100000 rows there will be some repetition of column names and values will need slicing into multiple lists
,那么使用32列可能不是显示数据的正确方法。也许你可以使用
iloc[::2]
索引来迭代值,然后使用zip
合并列名和值,然后转换为 Dataframe 。下面是演示代码。
输出