我有一个如下所示的数据集:
Category Date 1 Date 2
a 2017-01-01 2017-08-01
我希望能够转换这些数据,以便我在两个日期之间每个月都有一个记录 例如
Category Date
a 2017-01-01
a 2017-02-01
a 2017-03-01
.....
a 2017-08-01
我需要在python中执行此操作,我的数据已经在pandas数据框中。日期采用日期戳格式YYYY-MM-DD
答案 0 :(得分:6)
对$row = fgetcsv($file);
// Don't modify the original data (unless you need to) and
// remove duplicate calls to strtolower()
$r6 = strtolower($row[6]);
// Only test against lower case letters, " should not be needed
if ($r6 == 'plenty of stock available!' || $r6 == 'lowstock') {
// perform correction / change
$row[6] = '10';
} else if ($r6 == 'nostock') {
// perform correction / change
$row[6] = '2';
}
pd.date_range
如果您有超过3列,并且只想pd.DataFrame(
[[c, d] for c, d1, d2 in df.itertuples(index=False)
for d in pd.date_range(d1, d2, freq='MS')],
columns=['Category', 'Date']
)
Category Date
0 a 2017-01-01
1 a 2017-02-01
2 a 2017-03-01
3 a 2017-04-01
4 a 2017-05-01
5 a 2017-06-01
6 a 2017-07-01
7 a 2017-08-01
和Category
Date
pd.DataFrame(
[[c, d] for c, d1, d2, *_ in df.itertuples(index=False)
for d in pd.date_range(d1, d2, freq='MS')],
columns=['Category', 'Date']
)
解包其余的元组。
否则,我们可以捕获整个元组,只需抓住我们需要的位。
*_
答案 1 :(得分:3)
我不确定日期时间格式是m-d-y还是d-m-y ...您也可以将resample('D')
替换为resample('MS')
获取月份开始。
df.melt('Category').set_index('value').resample('D').first().ffill().drop('variable',1)
Out[31]:
Category
value
2017-01-01 a
2017-01-02 a
2017-01-03 a
2017-01-04 a
2017-01-05 a
2017-01-06 a
2017-01-07 a
2017-01-08 a
更改为MS
df.melt('Category').set_index('value').resample('MS').first().ffill().drop('variable',1)
Out[40]:
Category
value
2017-01-01 a
2017-02-01 a
2017-03-01 a
2017-04-01 a
2017-05-01 a
2017-06-01 a
2017-07-01 a
2017-08-01 a