这是Python的新手,通常在这里进行编码,因此对于大多数人来说,这应该是非常基本的。
我基本上是用Datetime索引创建此数据框的。
这是数据框
df = pd.date_range(start='2018-01-01', end='2019-12-31', freq='D')
我现在想在我的df中添加一个名为“ vacation”的新变量,如果日期介于2018-06-24和2018-08-24之间,则值为1;如果不在这些日期之间,则值为0。 。我该怎么做呢? 我创建了一个具有一定休假范围的变量,但是我不确定如何将这两个变量放在一起并在数据框中为“休假”创建新列。
vacation = pd.date_range(start = '2018-06-24', end='2018-08-24')
谢谢。
答案 0 :(得分:1)
新DataFrame
的解决方案:
i = pd.date_range(start='2018-01-01', end='2018-08-26', freq='D')
m = (i > '2018-06-24') & (i < '2018-08-24')
df = pd.DataFrame({'vacation': m.astype(int)}, index=i)
或者:
df = pd.DataFrame({'vacation':np.where(m, 1, 0)}, index=i)
print (df)
vacation
2018-01-01 0
2018-01-02 0
2018-01-03 0
2018-01-04 0
2018-01-05 0
...
2018-08-22 1
2018-08-23 1
2018-08-24 0
2018-08-25 0
2018-08-26 0
[238 rows x 1 columns]
将新列添加到现有DataFrame
的解决方案:
通过比较DatetimeIndex
与&
的{{1}}链接来创建掩码,并将其转换为整数(bitwise AND
到True
和1
到False
)或使用numpy.where
:
0
另一个具有i = pd.date_range(start='2018-01-01', end='2018-08-26', freq='D')
df = pd.DataFrame({'a': 1}, index=i)
m = (df.index > '2018-06-24') & (df.index < '2018-08-24')
df['vacation'] = m.astype(int)
#alternative
#df['vacation'] = np.where(m, 1, 0)
print (df)
a vacation
2018-01-01 1 0
2018-01-02 1 0
2018-01-03 1 0
2018-01-04 1 0
2018-01-05 1 0
.. ...
2018-08-22 1 1
2018-08-23 1 1
2018-08-24 1 0
2018-08-25 1 0
2018-08-26 1 0
[238 rows x 2 columns]
和DataFrame.loc
的解决方案-区别在于DatetimeIndex
包含1
和2018-06-24
边值:
2018-08-24
答案 1 :(得分:0)
首先,pd.date_range(start='2018-01-01', end='2019-12-31', freq='D')
将不会创建DataFrame
,而是会创建DatetimeIndex
。然后,可以将其作为索引或单独的列将其转换为DataFrame
。
# Having it as an index
datetime_index = pd.date_range(start='2018-01-01', end='2019-12-31', freq='D')
df = pd.DataFrame({}, index=datetime_index)
# Using numpy.where() to create the Vacation column
df['Vacation'] = np.where((df.index >= '2018-06-24') & (df.index <= '2018-08-24'), 1, 0)
或
# Having it as a column
datetime_index = pd.date_range(start='2018-01-01', end='2019-12-31', freq='D')
df = pd.DataFrame({'Date': datetime_index})
# Using numpy.where() to create the Vacation column
df['Vacation'] = np.where((df['Date'] >= '2018-06-24') & (df['Date'] <= '2018-08-24'), 1, 0)
注意:仅显示数据框df
的前五行。