如何通过将索引与数组合并来向数据帧添加零行?
import pandas as pd
df = pd.DataFrame(data = [[20170302, 25,0,42],
[20170120, 0,89,1]],
columns=['date','d1','d2','d3'])
date d1 d2 d3
0 20170302 25 0 42
1 20170120 0 89 1
dates = [20170302, 20170225, 20170120]
date d1 d2 d3
0 20170302 25 0 42
1 20170225 0 0 0
2 20170120 0 89 1
我尝试创建日期数据框,并合并。但是nosucess
cols = [c for c in df.columns if c not in ['date']]
df_dates = pd.DataFrame(0, dates, columns=cols)
new = pd.merge(df_dates, df,how='left', left_index=True, right_on='date')
print df_dates
d1 d2 d3
20170302 0 0 0
20170225 0 0 0
20170120 0 0 0
但我得到了:
d1_x d2_x d3_x date d1_y d2_y d3_y
0 0 0 0 20170302 25.0 0.0 42.0
1 0 0 0 20170225 NaN NaN NaN
1 0 0 0 20170120 0.0 89.0 1.0
答案 0 :(得分:1)
您可以使用app
添加缺少的日期:
target_*
产量
set_index/reindex/reset_index
或者,您可以使用import pandas as pd
df = pd.DataFrame(data = [[20170302, 25,0,42],
[20170120, 0,89,1]],
columns=['date','d1','d2','d3'])
dates = [20170302, 20170225, 20170120]
result = df.set_index('date').reindex(dates, fill_value=0).reset_index()
print(result)
并使用 date d1 d2 d3
0 20170302 25 0 42
1 20170225 0 0 0
2 20170120 0 89 1
将ZN替换为NaN:
pd.merge
请注意,fillna
默认情况下会合并所有共享列。所以上面的调用合并在In [168]: pd.merge(df, pd.DataFrame({'date':dates}), how='outer').fillna(0)
Out[168]:
date d1 d2 d3
0 20170302 25.0 0.0 42.0
1 20170120 0.0 89.0 1.0
2 20170225 0.0 0.0 0.0
上。 pd.merge
会导致date
为how='outer'
或pd.merge
中找到的每个日期的结果添加行。