nunique в новый фрейм данных - PullRequest
       24

nunique в новый фрейм данных

2 голосов
/ 15 апреля 2019

У меня есть некоторые данные в пандах:

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.

как сделать новый dataframe на основе этого nunique

мой ожидаемый результат выглядит так:

  combine    ID_A  ID_B
  combine_1  5     6
  combine_2  2     9

спасибо

1 Ответ

3 голосов
/ 15 апреля 2019

Использовать понимание списка со списком DataFrames и при необходимости изменять имена индексов путем понимания списка с помощью 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'
...