首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分组、排序和计算这个熊猫的数据差异?

如何分组、排序和计算这个熊猫的数据差异?
EN

Stack Overflow用户
提问于 2020-01-15 12:56:50
回答 2查看 548关注 0票数 3

我创建了这个dataframe,并需要将我的数据按价格分组,将我的数据按相同数量的床位、城市、浴室和排序(降序)分类。第二,我需要找出每一种价格之间的差异,把排在后面的价格划入同一组。例如,结果应该是:

1张床,1间浴室,马德里,10张

1张床,1个浴缸,马德里,8

1张床,1个浴缸,马德里,5

1张床,1间浴室,马德里,1张

我应该得到2,3,4.

我试过一些代码,似乎比我预期的要远.

代码语言:javascript
复制
data=[[1,'paris',1,2,'10'],[2,'madrid',2,2,8],[3,'madrid',2,2,11],[4,'paris',1,2,6],[5,'paris',1,2,5],[6,'madrid',2,1,7],[7,'paris',2,1,7],[8,'paris',2,1,7],[9,'madrid',1,4],[10,'paris',2,1,3],[11,'madrid',2,2,7],[12,'paris',2,3,12],[13,'madrid',2,3,7],[14,'madrid',1,1,3],[15,'paris',1,1,3],[16,'madrid',1,1,4],[17,'paris',1,1,5]]

df=pd.DataFrame(data, columns=['id','city','beds','baths','price'])
df

df['gap'] = df.sort_values('price',ascending=False).groupby(['city','beds','baths'])['price'].diff()
print (df)

在此之前,非常感谢您。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-15 13:30:20

我将使用pd.to_numericerrors = 'coerce'消除price列中的字符串,然后计算差额,而不考虑价格未知的房间(使用DataFrame.dropna)。然后,我将在DataFrame中显示结果排序,而不需要排序:

代码语言:javascript
复制
df['price']=pd.to_numeric(df['price'],errors = 'coerce')

代码语言:javascript
复制
df['difference_price'] = ( df.dropna()
                             .sort_values('price',ascending=False)
                             .groupby(['city','beds','baths'])['price'].diff(-1) )

或者使用GroupBy.shift

代码语言:javascript
复制
df['difference_price'] = df['price'].sub( df.dropna()
                                            .sort_values('price',ascending=False)
                                            .groupby(['city','beds','baths'])
                                            .price
                                            .shift(-1) )

显示结果

代码语言:javascript
复制
print(df,'\n'*3,'Sorted DatFrame: ')
print(df.sort_values(['city','beds','baths','price'],ascending = [True,True,True,False]))

输出

代码语言:javascript
复制
    id    city  beds  baths  price  difference_price
0    1   paris     1      2   10.0               4.0
1    2  madrid     2      2    8.0               1.0
2    3  madrid     2      2   11.0               3.0
3    4   paris     1      2    6.0               1.0
4    5   paris     1      2    5.0               NaN
5    6  madrid     2      1    7.0               NaN
6    7   paris     2      1    7.0               0.0
7    8   paris     2      1    7.0               4.0
8    9  madrid     1      4    NaN               NaN
9   10   paris     2      1    3.0               NaN
10  11  madrid     2      2    7.0               NaN
11  12   paris     2      3   12.0               NaN
12  13  madrid     2      3    7.0               NaN
13  14  madrid     1      1    3.0               NaN
14  15   paris     1      1    3.0               NaN
15  16  madrid     1      1    4.0               1.0
16  17   paris     1      1    5.0               2.0 


 Sorted DatFrame: 
    id    city  beds  baths  price  difference_price
15  16  madrid     1      1    4.0               1.0
13  14  madrid     1      1    3.0               NaN
8    9  madrid     1      4    NaN               NaN
5    6  madrid     2      1    7.0               NaN
2    3  madrid     2      2   11.0               3.0
1    2  madrid     2      2    8.0               1.0
10  11  madrid     2      2    7.0               NaN
12  13  madrid     2      3    7.0               NaN
16  17   paris     1      1    5.0               2.0
14  15   paris     1      1    3.0               NaN
0    1   paris     1      2   10.0               4.0
3    4   paris     1      2    6.0               1.0
4    5   paris     1      2    5.0               NaN
6    7   paris     2      1    7.0               0.0
7    8   paris     2      1    7.0               4.0
9   10   paris     2      1    3.0               NaN
11  12   paris     2      3   12.0               NaN
票数 3
EN

Stack Overflow用户

发布于 2020-01-15 13:47:53

如果我理解正确的话:

将我的数据按相同数量的床位、城市、浴室和排序分类(降序)。

所有不满足值的数据都应该删除吗?(在床和浴室不同的地方)。这是我的代码,给出你的问题的答案:

代码语言:javascript
复制
import numpy as np
import pandas as pd     
data=[[1,'paris',1,2,'10'],[2,'madrid',2,2,8],[3,'madrid',2,2,11],[4,'paris',1,2,6],[5,'paris',1,2,5],[6,'madrid',2,1,7],[7,'paris',2,1,7],[8,'paris',2,1,7],[9,'madrid',1,4],[10,'paris',2,1,3],[11,'madrid',2,2,7],[12,'paris',2,3,12],[13,'madrid',2,3,7],[14,'madrid',1,1,3],[15,'paris',1,1,3],[16,'madrid',1,1,4],[17,'paris',1,1,5]]

df=pd.DataFrame(data, columns=['id','city','beds','baths','price'])

df_new = df[df['beds'] == df['baths']]
df_new = df_new.sort_values(['city','price'],ascending=[False,False]).reset_index(drop=True)
df_new['diff_price'] = df_new.groupby(['city','beds','baths'])['price'].diff(-1)
print(df_new)

输出:

代码语言:javascript
复制
   id    city  beds  baths price diff_price
0  17   paris     1      1     5        NaN
1  15   paris     1      1     3         -2
2   3  madrid     2      2    11        NaN
3   2  madrid     2      2     8         -3
4  11  madrid     2      2     7         -1
5  16  madrid     1      1     4        NaN
6  14  madrid     1      1     3         -1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59751923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档