不能在Python Pandas中添加带有值的多列

时间:2018-06-11 14:05:11

标签: python pandas dataframe

我想添加引用数据的数据,所以我使用

data[reference.columns]=reference

但它只创建没有值的列,我该如何添加值?

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

您的两个DataFrame的索引方式不同,因此当您执行reference时,它会尝试在索引上对齐新列。由于data的索引不在index=0中(或仅与NaN对齐),因此会添加列,但会使用data填充值。

您希望使用reference中的值向for col in reference.columns: data[col] = reference[col].values[0] 添加多个静态列。你可以分配这些:

import pandas as pd
data = pd.DataFrame({'id': [1, 2, 3, 4],
                   'val1': ['A', 'B', 'C', 'D']})
reference = pd.DataFrame({'id2': [1, 2, 3, 4],
                   'val2': ['A', 'B', 'C', 'D']})

以下是该问题的说明。

data[reference.columns] = reference

这些指数的范围相同,范围为0-3。

   id val1  id2 val2
0   1    A    1    A
1   2    B    2    B
2   3    C    3    C
3   4    D    4    D

输出

data = pd.DataFrame({'id': [1, 2, 3, 4],
                   'val1': ['A', 'B', 'C', 'D']})
reference = pd.DataFrame({'id2': [1, 2, 3, 4],
                   'val2': ['A', 'B', 'C', 'D']})
reference.index=[3,4,5,6]

data[reference.columns]=reference

但是,如果这些DataFrame具有不同的索引(仅部分重叠):

   id val1  id2 val2
0   1    A  NaN  NaN
1   2    B  NaN  NaN
2   3    C  NaN  NaN
3   4    D  1.0    A

输出:

DECLARE @fromDt DATETIME = '06/11/2018 10:10:00';
DECLARE @toDt DATETIME = '06/12/2018 10:10:00';

SELECT SUM(IIF([Datetime] BETWEEN @fromDt AND @toDt, [PL], 0)) OVER() AS [Sum]
FROM [dbo].[MyTable]
WHERE ...

因为只共享3的索引值。