我试图根据存储在单独表中的日期值计算Pandas中基于时间的聚合.
第一个表table_a的顶部如下所示:
COMPANY_ID DATE MEASURE
1 2010-01-01 00:00:00 10
1 2010-01-02 00:00:00 10
1 2010-01-03 00:00:00 10
1 2010-01-04 00:00:00 10
1 2010-01-05 00:00:00 10
Run Code Online (Sandbox Code Playgroud)
以下是创建表的代码:
table_a = pd.concat(\
[pd.DataFrame({'DATE': pd.date_range("01/01/2010", "12/31/2010", freq="D"),\
'COMPANY_ID': 1 , 'MEASURE': 10}),\
pd.DataFrame({'DATE': pd.date_range("01/01/2010", "12/31/2010", freq="D"),\
'COMPANY_ID': 2 , 'MEASURE': 10})])
Run Code Online (Sandbox Code Playgroud)
第二个表table_b看起来像这样:
COMPANY END_DATE
1 2010-03-01 00:00:00
1 2010-06-02 00:00:00
2 2010-03-01 00:00:00
2 2010-06-02 00:00:00
Run Code Online (Sandbox Code Playgroud)
并创建它的代码是:
table_b = pd.DataFrame({'END_DATE':pd.to_datetime(['03/01/2010','06/02/2010','03/01/2010','06/02/2010']),\
'COMPANY':(1,1,2,2)})
Run Code Online (Sandbox Code Playgroud)
我希望能够在table_b的END_DATE之前的每30天期间获得每个COMPANY_ID的度量列的总和.
这是(我认为)SQL等价物:
select
b.COMPANY_ID,
b.DATE
sum(a.MEASURE) AS MEASURE_TO_END_DATE
from table_a a, table_b b …Run Code Online (Sandbox Code Playgroud) 我有一个csv格式的表,看起来像这样.我想转置表,以便指标名称列中的值是新列,
Indicator Country Year Value
1 Angola 2005 6
2 Angola 2005 13
3 Angola 2005 10
4 Angola 2005 11
5 Angola 2005 5
1 Angola 2006 3
2 Angola 2006 2
3 Angola 2006 7
4 Angola 2006 3
5 Angola 2006 6
Run Code Online (Sandbox Code Playgroud)
我希望最终结果像这样:
Country Year 1 2 3 4 5
Angola 2005 6 13 10 11 5
Angola 2006 3 2 7 3 6
Run Code Online (Sandbox Code Playgroud)
我尝试过使用pandas数据框并没有太大的成功.
print(df.pivot(columns = 'Country', 'Year', 'Indicator', values = 'Value'))
Run Code Online (Sandbox Code Playgroud)
有关如何实现这一点的任何想法?
谢谢
我有以下几点dataframe:
In [1]: df
Out[1]:
ID Month Transaction_Amount
1 2013/01 10
1 2013/02 20
1 2013/03 10
1 2013/04 20
1 2013/05 10
1 2013/06 20
1 2013/07 10
1 2013/08 20
1 2013/09 10
1 2013/10 20
1 2013/11 10
1 2013/12 20
1 2014/01 15
1 2014/02 25
1 2014/03 15
1 2014/04 25
...
1 2014/11 15
1 2014/12 25
...
10000000 2014/11 13
10000000 2014/12 23
Run Code Online (Sandbox Code Playgroud)
我想这样做是计算增长滚动月期间较去年同期,因此,例如,我想找到的值(2014/01 - 2013/01) / (2014/01)是(15 …
我有一系列像这样的时间戳,
3 2013-08-23 00:00:00
4 2008-09-21 00:00:00
5 2012-03-17 00:00:00
6 2011-12-31 00:00:00
7 2011-11-16 00:00:00
8 2008-01-23 00:00:00
9 2010-06-13 00:00:00
Run Code Online (Sandbox Code Playgroud)
我想将它们转换为 2010、2011 等格式的财政年度。财政年度为 FEB-JAN。我很困惑 - 我需要使用偏移量吗?如何将表示形式从时间戳更改为仅会计年度部分?
谢谢。
我试图将字段解释为日期,更改日期以表示日期显示的月份,将日期偏移一个月,然后将其表示为没有时间戳的日期.我最终得到了看起来和感觉太笨重的东西:
df['DATE'].apply( lambda d: pd.to_datetime(pd.to_datetime(d).to_period('M').to_timestamp('M')\
- np.timedelta64(1,'M')).date())
Run Code Online (Sandbox Code Playgroud)
时间戳是这种格式的字符串:
2012-09-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
有什么想法更好的方法吗?谢谢.
遵循这个食谱.我'转向'一个看起来像这样的数据框:
Close
2015-02-20 14:00:00 1200.1
2015-02-20 14:10:00 1199.8
2015-02-21 14:00:00 1199.3
2015-02-21 14:10:00 1199.0
2015-02-22 14:00:00 1198.4
2015-02-22 14:10:00 1199.7
Run Code Online (Sandbox Code Playgroud)
把它变成了这个:
14:00 14:10
2015-02-20 1200.1 1199.8
2015-02-21 1199.3 1199.0
2015-02-22 1198.4 1199.7
Run Code Online (Sandbox Code Playgroud)
但是,现在我想要在列之间进行简单的计算,例如:
df['Chg'] = df['14:10:00'] - df['14:00:00']
Run Code Online (Sandbox Code Playgroud)
我得到一个KeyError,因为在'pivoting'之后,列名是datetime.time数据.
In [1]: df_pivot.columns.tolist()
Out [2]:
[datetime.time(14, 0),
datetime.time(14, 10)]
Run Code Online (Sandbox Code Playgroud)
如何修改我的透视数据框,这样我就可以在列之间进行简单的计算.我猜这意味着将列名的格式从datetime.time更改为str.
谢谢
我有一个60列的数据框.我希望将列绘制在X轴上,并将索引绘制在y轴上.
df.plot()
Run Code Online (Sandbox Code Playgroud)
上面的代码默认将索引放在x轴上.我无法弄清楚如何切换轴.任何帮助赞赏.
我使用get_dummies()函数在pandas中创建了虚拟变量.我想修改结果以使用另一个指标,而不仅仅是get_dummies创建的二进制是/否.
现在虚拟变量数据框的外观如何:
VALUE DUMMY 1 DUMMY 2 DUMMY 3
10.00 0 0 1
30.00 0 1 0
50.00 0 0 0
15.00 1 0 0
30.00 0 0 0
Run Code Online (Sandbox Code Playgroud)
我想要实现的目标:
VALUE DUMMY 1 DUMMY 2 DUMMY 3
10.00 0 0 10
30.00 0 30 0
50.00 0 0 0
15.00 15 0 0
30.00 0 0 0
Run Code Online (Sandbox Code Playgroud)
我想到这样做的方式是:
np.where(df.COLUMN ==1, df.REPLACEMENT_VALUE, 0)
Run Code Online (Sandbox Code Playgroud)
但是这仅适用于一列.如果我尝试:
np.where(df[:,1:5] ==1, df.REPLACEMENT_VALUE, 0)
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为系列的框架形状不一致.复制系列REPLACEMENT_VALUE可能是一个选项,因此帧大小相同.我不确定这是不是最好的方法.任何帮助赞赏.
我想使用元组列表中的值替换list(foo)中的值.每个元组中的第一个值是要映射到第一个列表中的值的字段.列表栏中每个元组中的第二个值是我要在列表foo中替换的值.
foo = ['a','b','c']
bar = [('a','1'),('b','2'),('c','3')]
Run Code Online (Sandbox Code Playgroud)
预期成绩:
result = ['1','2','3']
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
python ×9
pandas ×8
dataframe ×3
datetime ×2
date ×1
formatting ×1
function ×1
indexing ×1
join ×1
list ×1
map ×1
matplotlib ×1
numpy ×1
pivot-table ×1
time-series ×1
transpose ×1
tuples ×1