我对此持怀疑态度,希望有人能为我回答这个问题。我有一个DataFrames列表,只有一个时间戳作为索引和一个销售列(取决于状态)。我想要做的是组合列表中的所有DataFrame并输出一个新的。示例数据框将出现:
| time | USA |
|-----------|-----|
| 12-1-2012 | 1 |
| 12-2-2012 | 1 |
| 12-3-2012 | 1 |
| 12-4-2012 | 3 |
| 12-5-2012 | 5 |
| 12-6-2012 | 6 |
| 12-7-2012 | 4 |
| 12-8-2012 | 2 |
| 12-9-2012 | 5 |
| time | UK |
|-----------|-----|
| 12-1-2012 | 1 |
| 12-2-2012 | 1 |
| 12-5-2012 | 5 |
| 12-6-2012 | 6 |
| 12-7-2012 | 4 |
| 12-8-2012 | 2 |
| 12-9-2012 | 5 |
| time | CAN |
|-----------|-----|
| 12-1-2012 | 1 |
| 12-2-2012 | 1 |
| 12-4-2012 | 3 |
| 12-6-2012 | 4 |
| 12-8-2012 | 2 |
| 12-9-2012 | 5 |
| time | USA | UK | CAN |
|-----------|-----|-----|-----|
| 12-1-2012 | 1 | 1 | 1 |
| 12-2-2012 | 1 | 1 | 1 |
| 12-3-2012 | 1 | NaN | NaN |
| 12-4-2012 | 3 | NaN | NaN |
| 12-5-2012 | 5 | 5 | NaN |
| 12-6-2012 | 6 | 6 | 6 |
| 12-7-2012 | 4 | 4 | 4 |
| 12-8-2012 | 2 | 2 | 2 |
| 12-9-2012 | 5 | 5 | 5 |
最后一张表在技术上是我想要发生的事情。我希望所有这些内容在时间上合并,如果它没有该密钥,那么现在只需添加NaN
值。我遇到了一些奇怪的事情。帧存储在列表中:
dataframes = [d1,d2,d3]
我尝试过的是在加入时使用reduce方法,它似乎会破坏数据。这是一个完整的例子。
d1 = ts.copy()
d1.columns = ['time']
d1.index = d1['time']
# del d1['time']
d1['USA'] = range(9)
d2 = ts.copy()
d2.columns = ['time']
d2.index = d2['time']
# del d2['time']
d2['UK'] = range(9)
d3 = ts.copy()
d3.columns = ['time']
d3.index = d3['time']
# del d3['time']
d3['UK'] = range(9)
d2.drop(d2.index[[2,3]])
d3.drop(d3.index[[2,4,6]])
dataframes = [d1, d2, d3]
df_final = reduce(lambda left,right: pd.merge(left,right,on='time'), dataframes)
df_final
# Output
time USA UK_x UK_y
0 2012-12-01 0 0 0
1 2012-12-02 1 1 1
2 2012-12-03 2 2 2
3 2012-12-04 3 3 3
4 2012-12-05 4 4 4
5 2012-12-06 5 5 5
6 2012-12-07 6 6 6
7 2012-12-08 7 7 7
8 2012-12-09 8 8 8
有人可以引导我朝着正确的方向前进而不告诉我阅读文档。
提前致谢, 斯蒂芬