【问题标题】:Create new column of count number of elem in row of dict of pandas dataframe在熊猫数据框的字典行中创建新的元素计数列
【发布时间】:2021-06-08 09:43:21
【问题描述】:

我有以下df:

values_list = [[15, {'num':[0]}, 100], [20, {'num':[0]}, 50], [25, {'num':[0]}, 80],
               [45, {'num':[0], 'option':[1]}, 48], [40, {'num':[0]}, 70], [41, {'num':[0]}, 90],
               [51, {'num':[0]}, 111]]
  

df = pd.DataFrame(values_list, columns=['Field_1', 'Field_2', 'Field_3'])

Fields_2 是 dict 的一列。

我想执行 len 跟随功能并将其放入新列 如果我这样做:

len(df.Field_2[3])

输出 = 2(其他索引为 1)

我想要的结果是如下的 DF

我尝试了以下 lambda 函数,但它似乎不起作用,因为我得到的列是列的 len 而不是行

df = df.assign(elem=lambda x: (len(x['Field_2'])))

我本来希望会有更多这样的东西,但这会产生错误

df = df.assign(elem=lambda x: (x[len(x['Field_2'])]))

有人能告诉我如何解决这个问题吗?

【问题讨论】:

  • df.assign(elem=df['Field_2'].apply(len))

标签: python pandas dataframe lambda


【解决方案1】:

Series.applySeries.map 中的每个值使用len

df = df.assign(elem=lambda x: x['Field_2'].apply(len))

print (df)
   Field_1                      Field_2  Field_3  elem
0       15                 {'num': [0]}      100     1
1       20                 {'num': [0]}       50     1
2       25                 {'num': [0]}       80     1
3       45  {'num': [0], 'option': [1]}       48     2
4       40                 {'num': [0]}       70     1
5       41                 {'num': [0]}       90     1
6       51                 {'num': [0]}      111     1

或来自@Don'tAccept 的解决方案,谢谢:

df = df.assign(elem=df['Field_2'].apply(len))

或来自@Asish M. 的解决方案,谢谢:

df = df.assign(elem=df['Field_2'].str.len())

【讨论】:

  • 我也打算在没有 lambda df.assign(elem=df['Field_2'].apply(len)) 的情况下添加相同的答案
  • @Don'tAccept - 谢谢,好主意。如果之前不计算Field_2,那就更好df.assign(elem=df['Field_2'].apply(len))
【解决方案2】:

以下应该可以工作:

df["elem"] = df["Field_2"].apply(len)

【讨论】:

    【解决方案3】:

    您可以在将每个字典转换为列表并获取其长度时使用 lambda:

    df['elem'] = df['Field_2'].apply(lambda x: len(list(x)))
    

    输出:

           Field_1                       Field_2    Field_3   elem
    0           15                  {'num': [0]}        100      1
    1           20                  {'num': [0]}         50      1
    2           25                  {'num': [0]}         80      1
    3           45   {'num': [0], 'option': [1]}         48      2
    4           40                  {'num': [0]}         70      1
    5           41                  {'num': [0]}         90      1
    6           51                  {'num': [0]}        111      1
    

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 1970-01-01
      • 2023-02-01
      • 2020-08-14
      • 2016-01-14
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多