小编che*_*ens的帖子

在pandas中提取日期时间类型列的第一天

我有以下数据帧:

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.

python dataframe pandas datetime64

24
推荐指数
5
解决办法
1万
查看次数

使用数据透视表熊猫后如何摆脱多级索引?

我有以下数据框(真正的数据框比这个更大):

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)

python pivot-table data-analysis dataframe pandas

16
推荐指数
2
解决办法
1万
查看次数

在每个pandas数据帧行中查找top-n最高值列的名称

我有以下数据帧:

  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.

python top-n dataframe pandas

9
推荐指数
2
解决办法
4686
查看次数

将 sparkdataframe 写入 S3 中的 .csv 文件并在 pyspark 中选择一个名称

我有一个数据框,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

9
推荐指数
1
解决办法
2万
查看次数

如何将类型Row转换为Vector以提供给KMeans

当我尝试将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?

k-means apache-spark pyspark pyspark-sql apache-spark-mllib

8
推荐指数
2
解决办法
1万
查看次数

按两列分组并计算pandas中每个组合的出现次数

我有以下数据框:

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)

实际上对我来说最重要的是拥有一个具有出现次数的列名计数,我需要稍后使用该列.

python data-analysis dataframe pandas

8
推荐指数
2
解决办法
7948
查看次数

计算spark Dataframe中分组数据的分位数

我有以下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

dataframe apache-spark apache-spark-sql pyspark

7
推荐指数
1
解决办法
1万
查看次数

如何在pyspark中关闭科学记数法?

作为一些聚合的结果,我想出了以下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列中禁用科学记数法?

apache-spark apache-spark-sql pyspark spark-dataframe

6
推荐指数
1
解决办法
6460
查看次数

在Python中为图像中的每个像素选择7*7个相邻像素的最快方法

需要将图像作为数组读取,并为每个像素选择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张图片,因此所有图片都需要很长时间.我正在寻找一种更快的方法来迭代每个像素并执行上述任务.

编辑: 在此输入图像描述 对于每个像素,这就是我所说的邻居像素 face1[i-3 : i+4 ,j-3:j+4]

python numpy scipy scikit-learn scikit-image

5
推荐指数
1
解决办法
1582
查看次数

如何在matplotlib图中更改xticks字体大小

我有以下代码:

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 matplotlib pandas

5
推荐指数
1
解决办法
2万
查看次数