【问题标题】:How to merge/combine two rows within a column/Series in a DataFrame when the two rows' values are different?当两行的值不同时,如何在 DataFrame 的列/系列中合并/组合两行?
【发布时间】:2018-04-06 20:48:03
【问题描述】:

我有一个 DataFrame,其中一列是“语言”的“lang”。

此列中有两个不同的值,“en”表示“English”,“en-gb”表示“British English”。

此行中还有许多其他值,包括“es”表示“西班牙语”,“fr”表示“法语”等等。

所以它看起来像这样:

user        lang       id

joe         en         77788
jim         en-gb      23323
pedro       es         12134
tom         en         53892
juan        es         24434
phillippe   fr         04211
george      en-gb      99999

出于分析目的,我想将“en”和“en-gb”值一起计算为相同的“en”或“English”值。也许我可以只将此列放入一个系列中,然后将它们计为一个,或者我可以用“en”更改“en-gb”值。

【问题讨论】:

  • 您可以使用.replace 函数...您到底在问什么?
  • 如果语言有两个字母,那么你可以使用df['lang'] = df['lang'].str[:2]

标签: python pandas dataframe replace series


【解决方案1】:

通过使用replace

df=df.replace({'en-gb':'en'})
df
Out[358]: 
        user lang     id
0        joe   en  77788
1        jim   en  23323
2      pedro   es  12134
3        tom   en  53892
4       juan   es  24434
5  phillippe   fr   4211
6     george   en  99999

【讨论】:

    【解决方案2】:

    您可以按照 Bharath 的建议使用 .str[:2] 更改列。如果要保持列不变,可以直接在该列上使用 groupby。 假设您要查找每种语言的用户数,

    df_new = df.groupby(df.lang.str[:2]).user.count()
    

    或者

    df_new = df.groupby(df.lang.str.split('-').str[0]).user.count()
    

    会回来

    lang
    en    4
    es    2
    fr    1
    

    并且您的原始数据不受影响

    【讨论】:

      【解决方案3】:

      如果您想要前两个字母,您可以使用字符串切片,即 .str[:2] 所以我们可以将语言划分视为一个。

      df['lang'].str[:2]
      
      0 zh 1 zh 2个 3 zh 4个 5 法郎 6 zh 名称:语言,数据类型:对象

      现在您将系列存储在其中一个列中,例如

      df['new'] = df['lang'].str[:2]
      

      与新的键合并。希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2018-04-06
        • 1970-01-01
        • 2016-01-17
        • 2021-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多