为熊猫中的每个键创建值列表吗?

时间:2018-11-13 04:55:55

标签: python pandas

我有一个CSV文件,看起来像这样,已经加载到数据框中了,

keycode, warehouse_id
      1,          WH1
      1,          WH2
      1,          WH1

我想将其映射到看起来像这样的输出

keycode, warehouse_ids
      1,    [WH1, WH2]

我不确定在大熊猫中从哪里开始?我尝试使用数据透视表,但使用了聚合表,但是无法选择正确的聚合函数。

谢谢。

3 个答案:

答案 0 :(得分:2)

使用groupby + unique

df1 = df.groupby('keycode,')['warehouse_id'].unique().reset_index()

print(df1)
  keycode, warehouse_id
0       1,   [WH1, WH2]

说明:

通常,在将groupby与单个操作列配合使用时,如下所示会生成索引为groupby key的{​​{3}},为此,我们使用Seriesindex更改为column

print(df.groupby('keycode,')['warehouse_id'].unique())
keycode,
1,    [WH1, WH2]
Name: warehouse_id, dtype: object

print(type(df.groupby('keycode,')['warehouse_id'].unique()))
<class 'pandas.core.series.Series'> 

print(df.groupby('keycode,')['warehouse_id'].unique().reset_index())
  keycode, warehouse_id
0       1,   [WH1, WH2]

答案 1 :(得分:1)

pandas 'groupby'运算符用于执行此类操作。

您可以这样做:

df.groupby('keycode')['warehouse_id'].apply(list)

假设“ df”是您的数据框名称。

答案 2 :(得分:1)

list(set(iterable))

df.groupby('keycode').warehouse_id.apply(lambda x: [*{*x}]).reset_index()

   keycode warehouse_id
0        1   [WH2, WH1]

drop_duplicates

df.drop_duplicates().groupby('keycode').warehouse_id.apply(list).reset_index()

   keycode warehouse_id
0        1   [WH1, WH2]