Python 如何在熊猫中添加行,直到满足条件
我有这样一个数据帧:Python 如何在熊猫中添加行,直到满足条件,python,pandas,numpy,Python,Pandas,Numpy,我有这样一个数据帧: x y frames 0 10 7 1 14 8 1 19 9 3 11 10 x y frames NaN NaN 0 NaN NaN 1 NaN NaN 2 NaN NaN 3 NaN NaN 4 NaN NaN 5 NaN NaN 6 0 10 7 1
x y frames
0 10 7
1 14 8
1 19 9
3 11 10
x y frames
NaN NaN 0
NaN NaN 1
NaN NaN 2
NaN NaN 3
NaN NaN 4
NaN NaN 5
NaN NaN 6
0 10 7
1 14 8
1 19 9
3 11 10
我想在数据帧的顶部添加行,这样frames
可以从0开始,递增1,直到达到第一个原始frames
值。我想为所有其他列添加NaN值
我尝试过这个,但它需要很长时间,最终崩溃:
starting_frame = int(df.frames.values[0])
print(starting_frame)
count = 0
while count < starting_frame:
row = ['', np.nan, np.nan, np.nan,
np.nan, np.nan, np.nan,
'', np.nan, np.nan, np.nan,
count]
d = pd.DataFrame(row)
df = pd.concat([d, df])
count+=1
print(df)
尝试使用
reindex
out = df.set_index('frames').reindex(range(df['frames'].max()+1)).reset_index()
out
Out[545]:
frames x y
0 0 NaN NaN
1 1 NaN NaN
2 2 NaN NaN
3 3 NaN NaN
4 4 NaN NaN
5 5 NaN NaN
6 6 NaN NaN
7 7 0.0 10.0
8 8 1.0 14.0
9 9 1.0 19.0
10 10 3.0 11.0
尝试使用
reindex
out = df.set_index('frames').reindex(range(df['frames'].max()+1)).reset_index()
out
Out[545]:
frames x y
0 0 NaN NaN
1 1 NaN NaN
2 2 NaN NaN
3 3 NaN NaN
4 4 NaN NaN
5 5 NaN NaN
6 6 NaN NaN
7 7 0.0 10.0
8 8 1.0 14.0
9 9 1.0 19.0
10 10 3.0 11.0
您可以为缺少的帧值创建一个系列,并使用concat将其预发送到DataFrame
In [66]: pd.concat([pd.Series(range(0, df.loc[0, 'frames']), name='frames').to_frame(), df]).reset_index(drop=True)
Out[66]:
frames x y
0 0 NaN NaN
1 1 NaN NaN
2 2 NaN NaN
3 3 NaN NaN
4 4 NaN NaN
5 5 NaN NaN
6 6 NaN NaN
7 7 0.0 10.0
8 8 1.0 14.0
9 9 1.0 19.0
10 10 3.0 11.0
您可以为缺少的帧值创建一个系列,并使用concat将其预发送到DataFrame
In [66]: pd.concat([pd.Series(range(0, df.loc[0, 'frames']), name='frames').to_frame(), df]).reset_index(drop=True)
Out[66]:
frames x y
0 0 NaN NaN
1 1 NaN NaN
2 2 NaN NaN
3 3 NaN NaN
4 4 NaN NaN
5 5 NaN NaN
6 6 NaN NaN
7 7 0.0 10.0
8 8 1.0 14.0
9 9 1.0 19.0
10 10 3.0 11.0
代码中的问题:
pd.DataFrame(row)
,您正在创建一个系列,而不是DataFrame中的一行pd.concat([d,df])
和count+=1
,较大的帧将位于顶部start_frame=int(df.frames.values[0])
计数=开始帧-1
当计数>=0时:
行=[np.nan,np.nan,count]
d=pd.DataFrame([row],columns=['x','y','frames']))
df=pd.concat([d,df])
计数-=1
打印(df)
您还可以创建一个辅助数据框,其frames
列值从0开始,并在该辅助数据框上合并df
df=df.merge(pd.DataFrame({'frames':range(df['frames'].max()+1)}),how='right')
#打印(df)
x-y框架
0楠楠0
1楠楠1
2楠楠2
3楠楠3
4楠楠4
5楠楠5
6楠楠6
7 0.0 10.0 7
8 1.0 14.0 8
9 1.0 19.0 9
10 3.0 11.0 10
代码中的问题:
pd.DataFrame(row)
,您正在创建一个系列,而不是DataFrame中的一行pd.concat([d,df])
和count+=1
,较大的帧将位于顶部start_frame=int(df.frames.values[0])
计数=开始帧-1
当计数>=0时:
行=[np.nan,np.nan,count]
d=pd.DataFrame([row],columns=['x','y','frames']))
df=pd.concat([d,df])
计数-=1
打印(df)
您还可以创建一个辅助数据框,其frames
列值从0开始,并在该辅助数据框上合并df
df=df.merge(pd.DataFrame({'frames':range(df['frames'].max()+1)}),how='right')
#打印(df)
x-y框架
0楠楠0
1楠楠1
2楠楠2
3楠楠3
4楠楠4
5楠楠5
6楠楠6
7 0.0 10.0 7
8 1.0 14.0 8
9 1.0 19.0 9
10 3.0 11.0 10
这可以在帧中获得正确的值,但它会将Nant中的所有x
和y
值用于在帧中获得正确的值,但它会将Nant中的所有x
和y
值用于在帧中获得正确的值,但它会将所有的x和y值NaN@connor449检查您的列类型,它在我这边工作得很好这可以在帧中获得正确的值,但是它可以在NaN@connor449检查你的列类型,它在我这边可以正常工作