我想创建一个每列具有多个标题的Pandas数据框,并用循环数据逐行填充数据框。我之前已经创建了数据框,但是对于我真正想做的事情来说这似乎很复杂,而且我不知道从哪里开始。
示例:
step = list(range(1,5))
for i in step:
time = -2
for j in range(0,5): # Time goes from -2 to 2
one = time*0.5
two = time*0.4
score = one + two
# Code populate dataframe with column time for one and two sub columns,
# and the score for the score column
time += 1
print("step %s " % i)
答案 0 :(得分:2)
您可以在指定index
和columns
的同时使用pd.DataFrame
构造函数。重要的是要使用MultiIndex
列:
idx = pd.Index([f'step {i}' for i in range(1, 5)], name='time')
cols = pd.MultiIndex.from_tuples([(i, j) for i in range(-2, 3) for j in ('one', 'two')])
df = pd.DataFrame(index=idx, columns=cols)
然后您可以通过pd.DataFrame.at
填充值以按标签进行快速标量设置:
df.at['step 1', (-2, 'two')] = 2
df.at['step 3', (0, 'one')] = 5
print(df)
-2 -1 0 1 2
one two one two one two one two one two
time
step 1 NaN 2 NaN NaN NaN NaN NaN NaN NaN NaN
step 2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
step 3 NaN NaN NaN NaN 5 NaN NaN NaN NaN NaN
step 4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
答案 1 :(得分:1)
尽管jpp已经回答了大部分内容,但我注意到还有另一个“分数”。您想要的列。
arrays= [['score', -2, -2, -1, -1, 0, 0, 1, 1, 2 ,2, 'score'],
[None, 'one', 'two', 'one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
columns = pd.MultiIndex.from_tuples(tuples, names = ['time', None ])
df = pd.DataFrame(index = ['Step 1', 'Step 2', 'Step 3', 'Step 4', 'Step 5'], columns=columns)
df
time score -2 -1 0 1 2
NaN one two one two one two one two one two
Step 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Step 2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Step 3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Step 4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Step 5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
有点像黑客入侵