我有以下数据帧:
user_id purchase_date
1 2015-01-23 14:05:21
2 2015-02-05 05:07:30
3 2015-02-18 17:08:51
4 2015-03-21 17:07:30
5 2015-03-11 18:32:56
6 2015-03-03 11:02:30
Run Code Online (Sandbox Code Playgroud)
并且purchase_date是一个datetime64[ns]专栏.我需要添加一个新列df[month],其中包含购买日期的第一天:
df['month']
2015-01-01
2015-02-01
2015-02-01
2015-03-01
2015-03-01
2015-03-01
Run Code Online (Sandbox Code Playgroud)
我正在寻找像DATE_FORMAT(purchase_date, "%Y-%m-01") mSQL 一样的东西.我试过以下代码:
df['month']=df['purchase_date'].apply(lambda x : x.replace(day=1))
Run Code Online (Sandbox Code Playgroud)
它以某种方式工作但返回:2015-01-01 14:05:21.
我有以下数据框(真正的数据框比这个更大):
sale_user_id sale_product_id count
1 1 1
1 8 1
1 52 1
1 312 5
1 315 1
Run Code Online (Sandbox Code Playgroud)
然后重新塑造它以使用以下代码将sale_product_id中的值作为列标题移动:
reshaped_df=id_product_count.pivot(index='sale_user_id',columns='sale_product_id',values='count')
Run Code Online (Sandbox Code Playgroud)
结果数据框是:
sale_product_id -1057 1 2 3 4 5 6 8 9 10 ... 98 980 981 982 983 984 985 986 987 99
sale_user_id
1 NaN 1.0 NaN NaN NaN NaN NaN 1.0 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN …Run Code Online (Sandbox Code Playgroud) 我有以下数据帧:
id p1 p2 p3 p4
1 0 9 1 4
2 0 2 3 4
3 1 3 10 7
4 1 5 3 1
5 2 3 7 10
Run Code Online (Sandbox Code Playgroud)
我需要以一种方式重塑数据框,对于每个id,它将具有最高值的前3列.结果将是这样的:
id top1 top2 top3
1 p2 p4 p3
2 p4 p3 p2
3 p3 p4 p2
4 p2 p3 p4/p1
5 p4 p3 p2
Run Code Online (Sandbox Code Playgroud)
它显示了每个最畅销的前3名user_id.我已经使用dplyrR中的包完成了它,但我正在寻找等效的pandas.
我有一个数据框,ai 将在 S3 中将其写入一个 .csv 文件,我使用以下代码:
df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly",mode='overwrite',header=True)
Run Code Online (Sandbox Code Playgroud)
它在 product_profit_weekly 文件夹中放置了一个 .csv 文件,目前 .csv 文件在 S3 中有一个奇怪的名称,是否可以在我要写的时候选择一个文件名?
amazon-s3 apache-spark apache-spark-sql spark-dataframe pyspark-sql
当我尝试将df2提供给kmeans时,我收到以下错误
clusters = KMeans.train(df2, 10, maxIterations=30,
runs=10, initializationMode="random")
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
Cannot convert type <class 'pyspark.sql.types.Row'> into Vector
Run Code Online (Sandbox Code Playgroud)
df2是一个如下创建的数据框:
df = sqlContext.read.json("data/ALS3.json")
df2 = df.select('latitude','longitude')
df2.show()
latitude| longitude|
60.1643075| 24.9460844|
60.4686748| 22.2774728|
Run Code Online (Sandbox Code Playgroud)
如何将这两列转换为Vector并将其提供给KMeans?
我有以下数据框:
data = pd.DataFrame({'user_id' : ['a1', 'a1', 'a1', 'a2','a2','a2','a3','a3','a3'], 'product_id' : ['p1','p1','p2','p1','p1','p1','p2','p2','p3']})
product_id user_id
p1 a1
p1 a1
p2 a1
p1 a2
p1 a2
p1 a2
p2 a3
p2 a3
p3 a3
Run Code Online (Sandbox Code Playgroud)
在实际情况中,可能还有一些其他列,但我需要做的是按data_id和user_id列分组数据并计算每个组合的数量,并将其作为新数据框中的新列添加
输出应该是这样的:
user_id product_id count
a1 p1 2
a1 p2 1
a2 p1 3
a3 p2 2
a3 p3 1
Run Code Online (Sandbox Code Playgroud)
我试过以下代码:
grouped=data.groupby(['user_id','product_id']).count()
Run Code Online (Sandbox Code Playgroud)
但结果是:
user_id product_id
a1 p1
p2
a2 p1
a3 p2
p3
Run Code Online (Sandbox Code Playgroud)
实际上对我来说最重要的是拥有一个具有出现次数的列名计数,我需要稍后使用该列.
我有以下Spark数据帧:
agent_id|payment_amount|
+--------+--------------+
| a| 1000|
| b| 1100|
| a| 1100|
| a| 1200|
| b| 1200|
| b| 1250|
| a| 10000|
| b| 9000|
+--------+--------------+
Run Code Online (Sandbox Code Playgroud)
我的欲望输出会是这样的
agen_id 95_quantile
a whatever is 95 quantile for agent a payments
b whatever is 95 quantile for agent b payments
Run Code Online (Sandbox Code Playgroud)
对于每组agent_id,我需要计算0.95分位数,我采取以下方法:
test_df.groupby('agent_id').approxQuantile('payment_amount',0.95)
Run Code Online (Sandbox Code Playgroud)
但我采取以下错误:
'GroupedData' object has no attribute 'approxQuantile'
Run Code Online (Sandbox Code Playgroud)
我需要在新列中具有.95分位数(百分位数),以便稍后可用于过滤目的
我使用的是Spark 2.0.0
作为一些聚合的结果,我想出了以下sparkdataframe:
------------+-----------------+-----------------+
|sale_user_id|gross_profit |total_sale_volume|
+------------+-----------------+-----------------+
| 20569| -3322960.0| 2.12569482E8|
| 24269| -1876253.0| 8.6424626E7|
| 9583| 0.0| 1.282272E7|
| 11722| 18229.0| 5653149.0|
| 37982| 6077.0| 1181243.0|
| 20428| 1665.0| 7011588.0|
| 41157| 73227.0| 1.18631E7|
| 9993| 0.0| 1481437.0|
| 9030| 8865.0| 4.4133791E7|
| 829| 0.0| 11355.0|
+------------+-----------------+-----------------+
Run Code Online (Sandbox Code Playgroud)
并且数据帧的架构是:
root
|-- sale_user_id: string (nullable = true)
|-- tapp_gross_profit: double (nullable = true)
|-- total_sale_volume: double (nullable = true)
Run Code Online (Sandbox Code Playgroud)
如何在gross_profit和total_sale_volume列中禁用科学记数法?
需要将图像作为数组读取,并为每个像素选择7*7个相邻像素,然后重新整形并作为第一行训练集:
import numpy as np
from scipy import misc
face1=misc.imread('face1.jpg')
Run Code Online (Sandbox Code Playgroud)
face1尺寸是(288, 352, 3),需要为每个像素找到7*7个相邻像素,所以49*3颜色然后将其重新整形为(1,147)数组并将其堆叠成所有像素的数组,我采用以下方法:
X_training=np.zeros([1,147] ,dtype=np.uint8)
for i in range(3, face1.shape[0]-3):
for j in range(3, face1.shape[1]-3):
block=face1[i-3:i+4,j-3:j+4]
pxl=np.reshape(block,(1,147))
X_training=np.vstack((pxl,X_training))
Run Code Online (Sandbox Code Playgroud)
结果X_training形状是(97572, 147)
并且最后一行包含全部为零:
a = len(X_training)-1
X_training = X_training[:a]
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于一张图片,但Wall time: 5min 19s我有2000张图片,因此所有图片都需要很长时间.我正在寻找一种更快的方法来迭代每个像素并执行上述任务.
我有以下代码:
ax=df_pivoted.plot(figsize=(30,15),linewidth=5)
plt.xticks( rotation=45)
plt.tick_params(labelsize = 20)
plt.xlabel('transaction_date', fontsize=20)
plt.grid(True)
plt.title('daily sale graph test_id=505 ',fontdict={'fontsize':30})
legend = ax.legend(loc=0, ncol=1, bbox_to_anchor=(0, 0, 1,1),fancybox=True,shadow=False,title='variations',prop={'size':30})
plt.setp(legend.get_title(),fontsize='30')
xposition = c12_days
for xc in xposition:
ax.axvline(x=xc, color='g', linestyle='--')
plt.show()
Run Code Online (Sandbox Code Playgroud)
上面的代码产生以下图形,其中我在x轴的日期,但问题是,你可以看到天有非常小的尺寸,但JUL和AUG是更大的我已经尝试了不同的字体大小xticks和tick_params,但还没有看到任何重大的改变.如何更改代码以使日数与JUL和AUG一样大?
python ×6
dataframe ×5
pandas ×5
apache-spark ×4
pyspark ×3
pyspark-sql ×2
amazon-s3 ×1
datetime64 ×1
k-means ×1
matplotlib ×1
numpy ×1
pivot-table ×1
scikit-image ×1
scikit-learn ×1
scipy ×1
top-n ×1