根据每个DataFrame行的匹配值将列表的值添加到pandas DataFrame列

时间:2018-09-21 00:18:49

标签: python pandas

我有一个看起来像这样的pandas DataFrame:

            0
2013-09-20  0
2013-09-21  1
2013-09-22  2
2013-09-23  3
2013-09-24  4
2013-09-25  5
2013-09-26  6
2013-09-27  7
2013-09-28  8
2013-09-29  9
...

以及以下结构的列表列表:

[[0, 125.77, 126.28, 125.77, 126.16],
 [3, 126.06, 126.31, 125.84, 125.86],
 [4, 126.04, 126.93, 126.0, 126.93],
 [5, 126.51, 126.51, 126.0, 126.18],
 [6, 127.63, 128.04, 127.57, 128.04],
 [7, 127.58, 127.8, 126.42, 126.94],
 [10, 126.59, 126.77, 125.14, 125.51],
 [11, 125.38, 125.88, 125.38, 125.88],
 [12, 124.3, 124.3, 123.3, 123.81],
 [13, 123.38, 123.55, 123.09, 123.23],
 [14, 122.71, 122.85, 122.5, 122.79],
 [17, 121.19, 121.74, 121.0, 121.74],
 [18, 122.09, 122.09, 121.12, 121.13],
 [19, 123.31, 123.88, 123.17, 123.58],
 [20, 124.57, 125.83, 124.57, 125.83],
 ...

我想将每个列表的最后四个值添加到DataFrame中,其中DataFrame的列“ 0”的数量等于列表集合中各个列表的第一个值。

例如:

            0 1      2      3      4
2013-09-20  0 125.77 126.28 125.77 126.16
2013-09-21  1 nan
2013-09-22  2 nan
2013-09-23  3 126.06 126.31 125.84 125.86
...

1 个答案:

答案 0 :(得分:1)

将列表转换为数据框,然后使用merge。在此示例中,我通过变量名称mylist调用了您的列表:

>>> df.merge(pd.DataFrame(mylist), how='left')
   0       1       2       3       4
0  0  125.77  126.28  125.77  126.16
1  1     NaN     NaN     NaN     NaN
2  2     NaN     NaN     NaN     NaN
3  3  126.06  126.31  125.84  125.86
4  4  126.04  126.93  126.00  126.93
5  5  126.51  126.51  126.00  126.18
6  6  127.63  128.04  127.57  128.04
7  7  127.58  127.80  126.42  126.94
8  8     NaN     NaN     NaN     NaN
9  9     NaN     NaN     NaN     NaN

如果需要指定要合并的列名,请使用参数left_on=whatever_column_name, right_on=0

df.merge(pd.DataFrame(mylist), left_on=0, right_on=0,how='left')

在您的情况下,原始df的列名称为0,因此不需要。