pandas 在列表中存储具有特定值的DataFrame行

k7fdbhmy  于 2023-01-19  发布在  其他
关注(0)|答案(2)|浏览(107)

我有一个DataFrame,如下所示:
| 身份证|乡村|城市|数量|复制的|
| - ------|- ------|- ------|- ------|- ------|
| 1个|法国|巴黎|二百|1个|
| 第二章|法国|巴黎|二百|1个|
| 三个|法国|里昂|五十|第二章|
| 四个|法国|里昂|五十|第二章|
| 五个|法国|里昂|五十|第二章|
我想为每个不同的值存储一个重复的列表,例如:
表1

[
    {
        "id": 1,
        "country": "France",
        "city": "Paris",
        "amount": 200,
    },
    {
        "id": 2,
        "country": "France",
        "city": "Paris",
        "amount": 200,
    }
  ]

表2

[
    {
        "id": 3,
        "country": "France",
        "city": "Lyon",
        "amount": 50,
    },
    {
        "id": 4,
        "country": "France",
        "city": "Lyon",
        "amount": 50,
    },
    {
        "id": 5,
        "country": "France",
        "city": "Lyon",
        "amount": 50,
    }
  ]

我试过用

df[df.duplicated(['country','city','amount', 'duplicated'], keep = False)]

但它只是返回相同的df。

pw9qyyiw

pw9qyyiw1#

您可以使用groupby

lst = (df.groupby(['country', 'city', 'amount'])  # or .groupby('duplicated')
         .apply(lambda x: x.to_dict('records'))
         .tolist())

输出:

>>> lst
[[{'id': 3,
   'country': 'France',
   'city': 'Lyon',
   'amount': 50,
   'duplicated': 2},
  {'id': 4,
   'country': 'France',
   'city': 'Lyon',
   'amount': 50,
   'duplicated': 2},
  {'id': 5,
   'country': 'France',
   'city': 'Lyon',
   'amount': 50,
   'duplicated': 2}],
 [{'id': 1,
   'country': 'France',
   'city': 'Paris',
   'amount': 200,
   'duplicated': 1},
  {'id': 2,
   'country': 'France',
   'city': 'Paris',
   'amount': 200,
   'duplicated': 1}]]

另一种解决方案,如果你想一个dict索引duplicated键:
一个二个一个一个

zaq34kh6

zaq34kh62#

如果我没有理解错的话,您可以使用DataFrame.to_dict('records')来创建列表:

list_1 = df[df['duplicated'] == 1].to_dict('records')
list_1 = df[df['duplicated'] == 2].to_dict('records')

或者对于列中任意数量的值,您可以创建一个dict:

result = {}
for value in df['duplicated'].unique():
    result[value] = df[df['duplicated'] == value].to_dict('records')

相关问题