在pandas datafram中使用group by函数时找不到列名

2024-10-01 15:44:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧,如下所示:

   Country    City        POI       Type
0   NL       Amsterdam    KFC       restaurant
1   NL       Amsterdam    KFC       cafe
2   NL       Arnhem     McDonalds   fast food
3   NL       Arnhem     McDonalds   ice cream

我需要按类型列分组,这样就不会在所有其他列中有重复项。换句话说,我需要这样的输出:

^{pr2}$

我试图使用groupby函数,但所有列名都消失了,shape函数显示0列。也许有更好的方法来分组这些价值观?在

下面是一个示例代码:

import pandas as pd
import numpy as np
data = np.array([['','Country','City', 'POI', 'Type'],
            [0,"NL","Amsterdam", 'KFC', 'cafe'],
            [1,"NL","Amsterdam", 'KFC', 'restaurant'],
            [2,"NL","Arnhem", 'McDonalds', 'fast-food'],
            [3,"NL","Arnhem", 'McDonalds', 'ice cream']]
           )

initial_df = pd.DataFrame(data=data[1:,1:],
              index=data[1:,0],
              columns=data[0,1:])

final_df = initial_df .groupby( [ "Country", "City", "POI", "Type"] ).count()

print(list(final_df.columns.values))
print(final_df.shape)

Tags: citypandasdfdatacafetypenlcountry
2条回答

您可以分组到str.join

res = df.groupby(['Country', 'City', 'POI'])['Type'].apply(', '.join).reset_index()

print(res)

  Country       City        POI                Type
0      NL  Amsterdam        KFC    restaurant, cafe
1      NL     Arnhem  McDonalds  fastfood, icecream

您的final_df为空,因为您要求pandas按所有列分组。 如果您只想按列分组"Type"请执行以下操作:

grouped = initial_df .groupby( ["Type"] )

然后将count()函数应用于分组的数据帧。这将为每个组计算每列中非nan元素的实例。 但是你想做的是访问每个组。 您可以这样做:

^{pr2}$

希望这有帮助。在

相关问题 更多 >

    热门问题