【问题标题】:nunique into new dataframe唯一进入新数据框
【发布时间】:2019-04-15 04:26:41
【问题描述】:

我在 pandas 中有一些数据:

df1
df1['ID_A'].nunique()
5
df2
df2['ID_B'].nunique()
6
df3
df1['ID_A'].nunique()
2
df4
df2['ID_B'].nunique()
9

以此类推,直到 200 df

如何根据这个nunique制作新的dataframe

我的预期结果如下:

  combine    ID_A  ID_B
  combine_1  5     6
  combine_2  2     9

谢谢

【问题讨论】:

  • 您期望的索引是什么样的??
  • 索引如果可能的话combine_1combine_2

标签: python pandas dataframe jupyter-notebook unique


【解决方案1】:

将列表推导与 DataFrame 列表一起使用,并在必要时通过带有 f 字符串的列表推导更改索引名称:

df1 = pd.DataFrame({'ID_A':[1,2,3,4,5,5],
                    'ID_B':[1,2,3,4,5,6]})

df2 = pd.DataFrame({'ID_A':[1,2,1,2,1,1,1,2,1],
                    'ID_B':[1,2,3,4,5,6,7,8,9]})

dfs = [df1, df2]
df = pd.DataFrame([x.nunique() for x in dfs])
df.index = [f'combine_{x+1}' for x in df.index]
df.index.name= 'combine'
print (df)
           ID_A  ID_B
combine              
combine_1     5     6
combine_2     2     9

如有必要,仅按列表过滤列:

cols = ['ID_A', 'ID_B']
dfs = [df1, df2]
df = pd.DataFrame([x[cols].nunique() for x in dfs])
#filter only columns starting by ID_
#df = pd.DataFrame([x.filter(regex='^ID_').nunique() for x in dfs])
df.index = [f'combine_{x+1}' for x in df.index]
df.index.name= 'combine'

【讨论】:

  • 提前,这样的索引怎么样:第一个Combine_1和第二个Group_1?
  • @Arief - 如果只有[df1, df2] 那么df.index = ['Combine_1','Group_1'] 应该可以正常工作
  • 如果 200 df 怎么样?并在组合和分组后有序列号?
  • 所以需要['Combine_1','Group_1', 'Combine_2','Group_2', ..]
  • @Arief - 这是一个问题,如果需要这种格式,或者另一种格式:) 然后我创建解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
相关资源
最近更新 更多