gpt4 book ai didi

python - 在 Pandas DataFrame Python 中分组

转载 作者:行者123 更新时间:2023-11-28 21:50:51 25 4
gpt4 key购买 nike

我是 Pandas 的新手,我想知道我在以下示例中做错了什么。

我找到了一个例子 here解释如何在应用组而不是系列后获取数据框。

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

基本上,我想对我现在正在处理的庞大数据集应用相同的转换,但我收到一条错误消息:

budgetbid['meanpb']=budgetbid.groupby(['jobid'])['probudget'].transform(np.mean) #can't upload this data for the sake of explanation

ValueError: Length mismatch: Expected axis has 5564 elements, new values have 78421 elements

因此,我的问题是:

  1. 我该如何克服这个错误?
  2. 为什么在使用大小而不是整数类型应用分组依据时得到对象类型?
  3. 假设我想从 df1 获取一个数据框,其中包含独特的城市及其各自的 count(*)。我知道我可以做类似的事情

    newdf=df1.groupby(['City']).size()

不幸的是,这是一个系列,但我想要一个包含两列的数据框,City 和全新的变量,比方说 countcity。我怎样才能像本例中那样从分组操作中获取数据框?

  1. 你能给我一个 pandas 中的 select distinct 等价的例子吗?

最佳答案

问题 2:为什么 df1['size'] 有 dtype object

groupby/transform 返回一个带有 dtype for each column which is compatible 的 DataFrame包含原始列的数据类型和转换结果。因为 Name 有 dtype 对象,

df1.groupby(['City']).transform(np.size)

也被转换为 dtype 对象。

我不确定为什么 transform 被编码成这样工作;可能有一些用例要求这样做以确保某种意义上的正确性。


问题 1 和 3:为什么会出现 ValueError: Length mismatch 以及如何避免这种情况

被分组的列中可能有 NaN。例如,假设我们将 City 中的一个值更改为 NaN:

df2 = pd.DataFrame( { 
"Name" : ["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"] ,
"City" : [np.nan, "Seattle", "Baires", "Caracas", "Baires", "Caracas"] })
grouped = df2.groupby(['City'])

然后

In [86]: df2.groupby(['City']).transform(np.size)
ValueError: Length mismatch: Expected axis has 5 elements, new values have 6 elements

Groupby 不对 NaN 进行分组:

In [88]: [city for city, grp in  df2.groupby(['City'])]
Out[88]: ['Baires', 'Caracas', 'Seattle']

要解决这个问题,请使用 groupby/agg:

countcity = grouped.agg('count').rename(columns={'Name':'countcity'})
# countcity
# City
# Baires 2
# Caracas 2
# Seattle 1

然后将结果合并回df2:

result = pd.merge(df2, countcity, left_on=['City'], right_index=True, how='outer')
print(result)

产量

      City     Name  countcity
0 NaN Alice NaN
1 Seattle Bob 1
2 Baires Mallory 2
4 Baires Bob 2
3 Caracas Mallory 2
5 Caracas Mallory 2

问题 4:您的意思是 SQL select distinct 语句在 Pandas 中的等效项是什么?

如果是这样,也许您正在寻找 Series.unique或者可能遍历 Groupby 对象中的键,就像在

中所做的那样
[city for city, grp in df2.groupby(['City'])]

关于python - 在 Pandas DataFrame Python 中分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31348265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com