将pandas数据帧按列值分组转换为Huggingface Dataset的方法是什么?

huangapple go评论110阅读模式
英文:

How to convert pandas data frame to Huggingface Dataset grouped by column value?

问题

以下是您要翻译的内容:

  1. 我有以下数据框`df`
  2. import pandas as pd
  3. from datasets import Dataset
  4. data = [[1, 'Jack', 'A'], [1, 'Jamie', 'A'], [1, 'Mo', 'B'], [1, 'Tammy', 'A'], [2, 'JJ', 'A'], [2, 'Perry', 'C']]
  5. df = pd.DataFrame(data, columns=['id', 'name', 'class'])
  6. > df
  7. id name class
  8. 0 1 Jack A
  9. 1 1 Jamie A
  10. 2 1 Mo B
  11. 3 1 Tammy A
  12. 4 2 JJ A
  13. 5 2 Perry C
  14. 我想将其转换为一个Dataset对象每个`id`一个行期望的输出是
  15. > myDataset
  16. Dataset({
  17. features: ['id', 'name', 'class'],
  18. num_rows: 2
  19. })
  20. 其中
  21. > myDataset[0:2]
  22. {'id': ['1', '2'], 'name': [['Jack', 'Jamie', 'Mo', 'Tammy'], ['JJ', 'Perry']], 'class': [['A', 'A', 'B', 'A'], ['A', 'C']]}
  23. 根据文档[这里][1]我尝试了以下方法但这给了我一个包含6行的Dataset而不是按`id`列分组的一个包含2行的Dataset
  24. myDataset = Dataset.from_pandas(df)
  25. > myDataset
  26. Dataset({
  27. features: ['id', 'name', 'class'],
  28. num_rows: 6
  29. })
  30. > myDataset[0:2]
  31. {'id': [1, 1], 'name': ['Jack', 'Jamie'], 'class': ['A', 'A']}

请注意,代码部分不包括在翻译中。

英文:

I have the following data frame df

  1. import pandas as pd
  2. from datasets import Dataset
  3. data = [[1, 'Jack', 'A'], [1, 'Jamie', 'A'], [1, 'Mo', 'B'], [1, 'Tammy', 'A'], [2, 'JJ', 'A'], [2, 'Perry', 'C']]
  4. df = pd.DataFrame(data, columns=['id', 'name', 'class'])
  5. > df
  6. id name class
  7. 0 1 Jack A
  8. 1 1 Jamie A
  9. 2 1 Mo B
  10. 3 1 Tammy A
  11. 4 2 JJ A
  12. 5 2 Perry C

I would like to covert it to a Dataset object that has 2 rows, one per id. The desired output is

  1. > myDataset
  2. Dataset({
  3. features: ['id', 'name', 'class'],
  4. num_rows: 2
  5. })

where

  1. > myDataset[0:2]
  2. {'id': ['1', '2'], 'name': [['Jack', 'Jamie', 'Mo', 'Tammy'],['JJ', 'Perry']], 'class': [['A', 'A', 'B', 'A'], ['A', 'C']]}

Based on the documentation here, I tried the following but that gave me a Dataset with 6 rows, instead of one with 2 rows and grouped by the column id

  1. myDataset = Dataset.from_pandas(df)
  2. > myDataset
  3. Dataset({
  4. features: ['id', 'name', 'class'],
  5. num_rows: 6
  6. })
  7. > myDataste[0:2]
  8. {'id': [1, 1], 'name': ['Jack', 'Jamie'], 'class': ['A', 'A']}

答案1

得分: 0

  1. myDataset = Dataset.from_pandas(df.groupby('id', as_index=False).agg(list))
英文:

You can try to aggregate the original dataframe by id

  1. myDataset = Dataset.from_pandas(df.groupby('id', as_index=False).agg(list))

huangapple
  • 本文由 发表于 2023年5月7日 14:17:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/76192459.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定