在基于另一个数据帧的for循环中创建数据帧

时间:2019-03-07 18:28:09

标签: python python-3.x pandas dataframe

我有一个数据帧df,我想获取其中的所有列以及其中的唯一值的计数,然后将其另存为另一个数据帧。我似乎找不到办法。我可以,但是打印我想要在控制台上显示的内容。这就是我的意思:

def counting_unique_values_in_df(df):
    for evry_colm in df:
        print (evry_colm, "-", df[evry_colm].value_counts().count())

现在可以打印出我想要的东西了。如果不执行打印,则执行newdf = pd.DataFrame(evry_colm, df[evry_colm].value_counts().count(), columns = ('a', 'b'))之类的操作,它会抛出一个错误,显示“ TypeError:类型为'numpy.int32'的对象没有len()”。显然,这是不对的。

S,我如何制作像columnNameUniqueCounts这样的数据框?

2 个答案:

答案 0 :(得分:1)

要计算每列的唯一值,可以在数据框中使用Apply和Nunique函数。 像这样:

import pandas as pd

df = pd.DataFrame([
       {'a': 1, 'b': 2}, 
       {'a': 2, 'b': 2}
     ])

count_series = df.apply(lambda col: col.nunique())

#   returned object is pandas Series 
#   a    2
#   b    1
#   to map it to DataFrame try

pd.DataFrame(count_series).T

答案 1 :(得分:0)

import pandas as pd
df = pd.DataFrame({'A': [1, 1, 2, 2], 'B': [1, 2, 3, 4]})
print(df)
print()
df = pd.DataFrame({col: [df[col].nunique()] for col in df})
print(df)

输出:

   A  B
0  1  1
1  1  2
2  2  3
3  2  4

   A  B
0  2  4