熊猫基于列将多行合并为单行

时间:2020-07-27 11:23:28

标签: python pandas

如何通过索引搜索数据帧后如何添加列值,列数是二维生成的。 数据框搜索遍历列表。

listgroup = [some list]
df[df.index.isin([200100000004,200100000005])]

               column1    column2    column3    columnN
200100000001    1        20         1              3
200100000009    1        55         1              3
200100000004    1        30         2              12
200100000005    1        50         3              4

结果

                           column1    column2    column3    columnN
200100000004,200100000005   2        80         5              16

1 个答案:

答案 0 :(得分:0)

  1. 根据isin()
  2. 过滤df
  3. 分配可用于groupby()的列 foo 和可用于构造级联索引的列 IDL
  4. 使用列表理解来构建agg()的说明
  5. 清理
df = pd.DataFrame({"ID":[200100000001,200100000009,200100000004,200100000005],"column1":[1,1,1,1],"column2":[20,55,30,50],"column3":[1,1,2,3],"columnN":[3,3,12,4]})
df = df.set_index("ID")
listgroup = [200100000004,200100000005]
df[df.index.isin(listgroup)].assign(foo=1,IDL=lambda x: x.index).groupby("foo")\
    .agg({**{"IDL":lambda x: ",".join([str(i) for i in list(x)])},
          **{col:"sum" for col in df.columns}
         }).reset_index().drop(columns=["foo"]).set_index("IDL")

输出

                           column1  column2  column3  columnN
IDL                                                          
200100000004,200100000005        2       80        5       16