Pandas 如果组大小大于1,则筛选数据帧

Pandas 如果组大小大于1,则筛选数据帧,pandas,dataframe,aggregate,Pandas,Dataframe,Aggregate,具有以下分组的数据帧: df = pd.DataFrame({ 'geonameid': ['1814991', '1814991', '3508796', '3508796', '3017382', '2017370', '2017370'], 'isolanguage': ['de', 'de', 'de', 'de', 'de', 'de', 'de'], 'alternate_name': ['China', 'Volksrepublik China', 'Do

具有以下分组的数据帧:

df = pd.DataFrame({
    'geonameid': ['1814991', '1814991', '3508796', '3508796', '3017382', '2017370', '2017370'], 
    'isolanguage': ['de', 'de', 'de', 'de', 'de', 'de', 'de'],
    'alternate_name': ['China', 'Volksrepublik China', 'Dominikanische Republik', 'Dom. Republik', 'Frankreich', 'Russische Föderation', 'Russland'],
    'isPreferredName': ['', '', '1', '', '', '', '1'],
    'isShortName': ['1', '', '', '1', '', '', '']
})

grouped = df.groupby(['geonameid', 'isolanguage'])
如何执行以下聚合逻辑(具有相同的输出结构):

  • 当组中的值超过1时,仅选择
    isPrefferdName
  • 如果没有这样的标志,请选择第一个值
  • 不确定是否可以与#1组合,如果组中的值超过1,请选择
    isShortName
  • 如何编写有关聚合函数的逻辑

    df = df.groupby(['geonameid', 'isolanguage']).agg(
        { 'alternate_name': lambda series: list(series)[0] })
    
    首选输出:中国、多米尼加共和国、法兰克福、俄罗斯


    谢谢你的帮助

    IIUC仅对
    isPrefferdName
    isShortName
    进行排序:

    print (df.sort_values(["isPreferredName", "isShortName"], ascending=False)
             .groupby(['geonameid', 'isolanguage'])["alternate_name"].first())
    
    geonameid  isolanguage
    1814991    de                               China
    2017370    de                            Russland
    3017382    de                          Frankreich
    3508796    de             Dominikanische Republik