在数据框中追加行的最优雅方式是:
a b time
0 nan nan 8
1 nan nan 5
2 nan nan 3
成:
a b time
0 nan nan 8
1 nan nan 7
2 nan nan 6
3 nan nan 5
4 nan nan 4
5 nan nan 3
6 nan nan 2
7 nan nan 1
8 nan nan 0
我尝试过的是构建一个函数missing_times
,它会给我带来一个缺少时间的新数据框,但是我将这两个数据库压缩在一起的问题。这种问题最有效的方法是什么?
答案 0 :(得分:3)
您可以将DataFrame
构造函数与reindex_axis
和numpy.arange
一起使用:
df = pd.DataFrame({'time':np.arange(df['time'].max() + 1)[::-1]})
.reindex_axis(df.columns, axis=1)
print (df)
a b time
0 NaN NaN 8
1 NaN NaN 7
2 NaN NaN 6
3 NaN NaN 5
4 NaN NaN 4
5 NaN NaN 3
6 NaN NaN 2
7 NaN NaN 1
8 NaN NaN 0
如果原始df中的值使用set_index
+ reindex
+ reset_index
+ reindex_axis
:
print (df)
a b time
0 4 5 8
1 2 8 5
2 1 2 3
df = df.set_index('time')
.reindex(np.arange(df['time'].max() + 1)[::-1])
.reset_index()
.reindex_axis(df.columns, axis=1)
print (df)
a b time
0 4.0 5.0 8
1 NaN NaN 7
2 NaN NaN 6
3 2.0 8.0 5
4 NaN NaN 4
5 1.0 2.0 3
6 NaN NaN 2
7 NaN NaN 1
8 NaN NaN 0
time
列中带有merge
的重复项解决方案:
print (df)
a b time
0 4 5 8
1 2 3 8
2 1 2 3
df1 = pd.DataFrame({'time':np.arange(df['time'].max() + 1)[::-1]})
df = pd.merge(df,df1, how='outer').sort_values('time', ascending=False)
print (df)
a b time
0 4.0 5.0 8
1 2.0 3.0 8
3 NaN NaN 7
4 NaN NaN 6
5 NaN NaN 5
6 NaN NaN 4
2 1.0 2.0 3
7 NaN NaN 2
8 NaN NaN 1
9 NaN NaN 0
答案 1 :(得分:1)
假设您想要做的是以这样的方式连接表,即在我将调用df1和df2的两个表之间不重复行,您可以使用:
df3 = pandas.merge(df1, df2, how='outer')
df3.sort_values(by='time', ascending=False)
答案 2 :(得分:1)
这是我的方法,它是4个步骤:
代码:
df.set_index('time')\
.reindex(range(max(df['time']) + 1))\
.sort_index(ascending = False)\
.reset_index()