我有以下DataFrame:
data = {'year': [2010, 2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012, 2013],
'store_number': ['1944', '1945', '1946', '1947', '1948', '1949', '1947', '1948', '1949', '1947'],
'retailer_name': ['Walmart','Walmart', 'CRV', 'CRV', 'CRV', 'Walmart', 'Walmart', 'CRV', 'CRV', 'CRV'],
'product': ['a', 'b', 'a', 'a', 'b', 'a', 'b', 'a', 'a', 'c'],
'amount': [5, 5, 8, 6, 1, 5, 10, 6, 12, 11]}
stores = pd.DataFrame(data, columns=['retailer_name', 'store_number', 'year', 'product', 'amount'])
stores.set_index(['retailer_name', 'store_number', 'year', 'product'], inplace=True)
stores.groupby(level=[0, 1, 2, 3]).sum()
Run Code Online (Sandbox Code Playgroud)
我想转换以下Dataframe:
amount
retailer_name store_number year product …Run Code Online (Sandbox Code Playgroud) 我正在尝试将两个大的 CSV 文件合并在一起。
假设我有一个 Pandas DataFrame,如下所示......
EntityNum foo ...
------------------------
1001.01 100
1002.02 50
1003.03 200
Run Code Online (Sandbox Code Playgroud)
还有一个这样的……
EntityNum a_col b_col
-----------------------------------
1001.01 alice 7
1002.02 bob 8
1003.03 777 9
Run Code Online (Sandbox Code Playgroud)
我想像这样加入他们:
EntityNum foo a_col
----------------------------
1001.01 100 alice
1002.02 50 bob
1003.03 200 777
Run Code Online (Sandbox Code Playgroud)
所以请记住,我不希望 b_col 出现在最终结果中。II 如何用 Pandas 实现这一点?
使用 SQL,我可能应该这样做:
SELECT t1.*, t2.a_col FROM table_1 as t1
LEFT JOIN table_2 as t2
ON t1.EntityNum = t2.EntityNum;
Run Code Online (Sandbox Code Playgroud)
我知道可以使用合并。这是我尝试过的:
import pandas as pd
df_a = pd.read_csv(path_a, sep=',') …Run Code Online (Sandbox Code Playgroud) 我有一个包含大量列的pandas数据帧,我需要查找哪些列是二进制的(仅值0或1)而不查看数据.应该使用哪个功能?
有像矩阵一样
ma = [[0.343, 0.351, 0.306], [0.145, 0.368, 0.487]]
Run Code Online (Sandbox Code Playgroud)
我想得到一个像这样的矢量:
[0.343, 0.145, 0.351, 0.368, 0.306, 0.487]
Run Code Online (Sandbox Code Playgroud)
试图得到它,我正在使用numpy,reshape但它不起作用.
a = np.array(ma)
>>> print a.shape
(2, 3)
Run Code Online (Sandbox Code Playgroud)
但我得到:
c = a.reshape(3, 2, order='F')
>>> print c
array([[ 0.343, 0.368],
[ 0.145, 0.306],
[ 0.351, 0.487]])
Run Code Online (Sandbox Code Playgroud)
对于任何矩阵大小,最好的方法是什么?我的意思是,例如,如果矩阵不是平方的:
[[0.404, 0.571, 0.025],
[0.076, 0.694, 0.230],
[0.606, 0.333, 0.061],
[0.595, 0.267, 0.138]]
Run Code Online (Sandbox Code Playgroud)
我想得到:
[0.404, 0.076, 0.606, 0.595, 0.571, 0.694, 0.333, 0.267, 0.025, 0.230, 0.061, 0.138]
Run Code Online (Sandbox Code Playgroud) 我必须打印出文本的每个第三个字母,末尾有空格,没有空格.除了每个字母之间的空格,我可以做任何事情.
这就是我所拥有的.
line = input('Message? ')
print(line[0]+line[3::3].strip())
Run Code Online (Sandbox Code Playgroud) 我正在使用熊猫在单个图中绘制3个子图。下面的代码完成了此任务。但是,我无法使子图中的数据线变粗。有人知道该怎么做吗?
## setup 3 dataframes
t_index=pd.date_range('1/1/2000', periods=10);
df_1 = DataFrame(np.random.randn(10, 4), index=t_index, columns=['A', 'B', 'C', 'D']);
df_2 = DataFrame(np.random.randn(10, 4), index=t_index, columns=['E', 'F', 'G', 'H']);
df_3 = DataFrame(np.random.randn(10, 4), index=t_index, columns=['I', 'J', 'K', 'L']);
##Setup Figure and add subplots
fig, axes = plt.subplots(3, 1, figsize=(6, 6))
plt.subplots_adjust(wspace=0.5, hspace=0.5);
target1 = axes[0]
target2 = axes[1]
target3 = axes[2]
df_1.plot(ax=target1)
df_2.plot(ax=target2)
df_3.plot(ax=target3)
Run Code Online (Sandbox Code Playgroud) 我有以下DataFrame:
Value 1lag
Date
2005-04-01 258.682029 214.382786
2005-05-01 173.253998 258.682029
2005-06-01 244.432029 173.253998
2005-07-01 213.706019 244.432029
2005-08-01 213.670665 213.706019
Run Code Online (Sandbox Code Playgroud)
这些是两个时间序列的绝对值.但是,我不想要那些绝对值,我想要它们的变体,所以它们看起来像这样:
Value 1lag
Date
2005-04-01 NaN NaN
2005-05-01 0.3302 -0.2066
2005-06-01 -0.4108 0.3302
2005-07-01 0.1257 -0.4108
2005-08-01 0.0002 0.1257
Run Code Online (Sandbox Code Playgroud)
有这么简单的命令吗?如果没有,你的建议是什么?
我是熊猫的新手,怀疑这有一个简单的答案,但现在它让我感到困惑。我想从多个数据帧(具有相同的列)中选择行,其中一列中的值出现在所有数据帧中。
所以如果我有以下内容:
import numpy as np
import pandas as pd
df1 = pd.DataFrame({'Col1'['Adams','Baker','Cash','Jones','Thomas'],\
'Col2': ['A','B','C','D','E'],'Col3':[10,11,12,13,14]})
df2 = pd.DataFrame({'Col1':['Adams','Cash','Fox','Jones','Johnson'],\
'Col2': ['D','E','F','G','H'],'Col3':[40,50,60,70,80]})
df3 = pd.DataFrame({'Col1': ['Adams','Barns','Jones','Smith','Thomas'],\
'Col2':['F','G','J','L','M'],'Col3':[21,21,22,23,24]})
print df1
print df2
print df3
Run Code Online (Sandbox Code Playgroud)
给予:
Col 1 Col2 Col3
0 Adams A 10
1 Baker B 11
2 Cash C 12
3 Jones D 13
4 Thomas E 14
Col1 Col2 Col3
0 Adams D 40
1 Cash E 50
2 Fox F 60
3 Jones G 70
4 Johnson H 80
Col1 …Run Code Online (Sandbox Code Playgroud) 在大型数据框中转发填充信息的最有效方法是什么?
我合并了每日文件中约600万行x 50列的维度数据。我删除了重复项,现在有大约200,000行唯一数据,这些数据可以跟踪其中一个维度发生的任何更改。
不幸的是,一些原始数据被弄乱了并且具有空值。如何有效地使用以前的值填充空数据?
id start_date end_date is_current location dimensions...
xyz987 2016-03-11 2016-04-02 Expired CA lots_of_stuff
xyz987 2016-04-03 2016-04-21 Expired NaN lots_of_stuff
xyz987 2016-04-22 NaN Current CA lots_of_stuff
Run Code Online (Sandbox Code Playgroud)
这就是数据的基本形状。问题是某些尺寸不应为空白(这是原始数据中的错误)。一个示例是,对于前一行,该行的位置已填写,但在下一行中为空白。我知道该位置没有更改,但由于它是空白,因此它正在将其捕获为唯一行。
我假设我需要使用ID字段进行分组。这是正确的语法吗?我是否需要列出数据框中的所有列?
cols = [list of all of the columns in the dataframe]
wfm.groupby(['id'])[cols].fillna(method='ffill', inplace=True)
Run Code Online (Sandbox Code Playgroud)
在200,000行数据框中,大约有75,000个唯一ID。我尝试做一个
df.fillna(method='ffill', inplace=True)
Run Code Online (Sandbox Code Playgroud)
但是我需要根据ID进行操作,并且我想确保自己的工作效率尽可能高(我的计算机花了很长时间读取所有这些文件并将其合并到内存中)。
对于我的评估,我想
使用以下脚本运行OLS regression estimation此URL中的数据集滚动1000窗口:https:
//drive.google.com/open?id =Python 0B2Iv8dfU4fTUa3dPYW5tejA0bzg.
# /usr/bin/python -tt
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels.formula.api import ols
df = pd.read_csv('estimated.csv', names=('x','y'))
model = pd.stats.ols.MovingOLS(y=df.Y, x=df[['y']],
window_type='rolling', window=1000, intercept=True)
df['Y_hat'] = model.y_predict
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的Python脚本时,我收到此错误:AttributeError: module 'pandas.stats' has no attribute 'ols'.这个错误可能来自我正在使用的版本吗?在pandas安装我的Linux节点上有一个版本的0.20.2
python ×9
pandas ×8
dataframe ×2
numpy ×2
csv ×1
left-join ×1
matplotlib ×1
python-3.x ×1
sql ×1
statsmodels ×1