如何在Pandas中获取带有键对值的列的数量?

问题描述 投票:0回答:1

我是潘达斯的新手,正在做一些练习。

问题是要找出有3种以上类型的项目数量。我很困惑,如何从下面的数据中获取类型(键)。type 列。

另外,Pandas在单列中存储kv对的方法是否正确?谢谢

shopid  name        type
1       item1       {S: 10, M: 10, L: 10}
2       item2       {S: 10, M: 10}
2       item3       {S: 10, M: 10, L: 10, XL: 10}
3       item1       {S: 10, M: 10, L: 10}
3       item2       {S: 10, M: 10}
4       item3       {S: 10, M: 10, L: 10, XL: 10}
4       item1       {S: 10, M: 10, L: 10}
4       item2       {S: 10, M: 10}
4       item4       {S: 10, M: 10, L: 10, XL: 10, XXL: 10}

预期输出

2

其中项目3和项目4有3种以上的类型

python pandas
1个回答
2
投票

这里还有一种方法,用str访问器看列'type'中的字典,然后用nunique来统计唯一名称的数量。

df.loc[df['type'].str.len() > 3, 'name'].nunique()

输出:

2

1
投票

IIUC ,考虑到下面是你的数据框架, 。

d = {'shopid': {0: 1, 1: 2, 2: 2, 3: 3, 4: 3, 5: 4, 6: 4, 7: 4, 8: 4},
 'name': {0: 'item1',
  1: 'item2',
  2: 'item3',
  3: 'item1',
  4: 'item2',
  5: 'item3',
  6: 'item1',
  7: 'item2',
  8: 'item4'},
 'type': {0: {'S': 10, 'M': 10, 'L': 10},
  1: {'S': 10, 'M': 10},
  2: {'S': 10, 'M': 10, 'L': 10, 'XL': 10},
  3: {'S': '10', 'M': 10, 'L': 10},
  4: {'S': 10, 'M': 10},
  5: {'S': 10, 'M': 10, 'L': 10, 'XL': 10},
  6: {'S': 10, 'M': 10, 'L': 10},
  7: {'S': 10, 'M': 10},
  8: {'S': 10, 'M': 10, 'L': 10, 'XL': 10, 'XXL': 10}}}
df = pd.DataFrame(d)

你可以将字典列转换为DataFrame,并将其分组在下面的数据框中。shopid 并得到第一个忽略NaN的值,然后在轴上取notna的和=1,然后比较。

output = (pd.DataFrame(df['type'].tolist()).groupby(df['name']).first()
          .notna().sum(1).gt(3).sum())
print(output)
#2

0
投票

看起来你的列 type 不伦不类 dictstr. 不过有一个小技巧你可以试试,通过观察这个数量的 types 实际上等于 : 你有。

df=df[df['type'].str.count(':')>3]

它应该可以帮助你选择有三种以上类型的行.另外,我同意关于数据框架中的数据类型的评论,在一列中把k,v作为dict并不是一个好的选择。


0
投票

注意:假设你的数据是在一个叫做 "dataframe "的数据框架中。 df

首先,为了您的目的,您可以通过以下方式删除DF中的重复内容。

df.drop_duplicates()

可以选择使用 df.drop_duplicates().reset_index()

然后,你可以通过以下方式添加一个松弛的列。

df['type_count'] = df.apply(lambda r: len(r['type']), axis = 1)

然后你可以紧缩,删除懈怠列,然后像这样找到行数。

print(df[df['type_count']>3].iloc[:,:-1].shape[0])

df[df['type_count']>3] 找到所有项目> 3个字典元素。.iloc[:,:-1] 移除松弛的柱子和 shape[0] 只选择行。

希望能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.