我是熊猫新手,我想知道在下面的例子中我做错了什么。在
我发现了一个例子here解释了如何在应用groupby而不是series之后获取数据帧。在
df1 = pd.DataFrame( {
"Name" : ["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"] ,
"City" : ["Seattle", "Seattle", "Baires", "Caracas", "Baires", "Caracas"] })
df1['size'] = df1.groupby(['City']).transform(np.size)
df1.dtypes #Why is size an object? shouldn't it be an integer?
df1[['size']] = df1[['size']].astype(int) #convert to integer
df1['avera'] = df1.groupby(['City'])['size'].transform(np.mean) #group by again
基本上,我想将同样的转换应用到我现在正在处理的一个巨大的数据集,但是我得到了一个错误消息:
^{pr2}$因此,我的问题是:
假设我想从df1
获得一个数据帧,其中包含唯一的城市及其各自的{
newdf=df1.groupby(['City']).size()
不幸的是,这是一个系列,但是我想要一个包含两列的数据帧,City
和一个全新的变量,比如{
select distinct
等价的例子吗?在
问题2:为什么
df1['size']
有object
的数据类型?groupby/transform
返回一个带有dtype for each column which is compatible的数据帧,其中包含原始列的数据类型和转换结果。由于Name
有dtype对象也转换为dtype对象。在
我不知道为什么
transform
是这样编码的;可能有一些用例要求这样做以确保某种意义上的正确性。在问题1&3:为什么我得到
ValueError: Length mismatch
以及如何避免它在被分组的列中可能有nan。例如,假设我们将
^{pr2}$City
中的一个值更改为NaN
:那么
Groupby不将nan分组:
要解决此问题,请使用
groupby/agg
:然后将结果合并回
df2
:收益率
问题4:您的意思是什么是Pandas等价的SQL
select distinct
语句?如果是这样的话,也许你正在寻找 Series.unique 或者可能迭代Groupby对象中的键,如中所述
3.)
只需再次致电
pd.Dataframe()
:newdf = pd.Dataframe(df1.City.value_counts())
或者
newdf = pd.Dataframe(groupby(['City']).size())
4.)我认为
select distinct
euqivalent只会在groupby中使用多个列。例如df1.groupby(['City', 'Name']).size()
将返回groupby对象:相关问题 更多 >
编程相关推荐