Python,pandas:如何将一个系列附加到数据帧

我有以下数据帧df1:

import pandas as pd
data = {'name': ['Jason','Molly','Tina','Jake','Amy','Lisa','Fred'],'gender': ['m','f','m','m'],}
df1 = pd.DataFrame(data,index = [1,2,3,4,5,6,7,8,9,10])

我想创建一个包含一些标准和一些自定义汇总统计信息df2的表.

df2 = df1.describe()
df2.rename(index={'top':'mode'},inplace=True)
df2.rename(index={'freq':'mode freq'},inplace=True)
df2

DF2:

gender    name
        count       10      10
        unique      2       7
        mode        f       Molly
        mode freq   7       3

我想为第二种模式向df2追加一行,为第二种模式的频率追加一行:

例:

gender  name
    count       10      10
    unique      2       7
    mode        f       Molly
    mode freq   7       3
    2nd mode    m       Lisa
    2nd freq    3       2

我发现你可以得到第二种模式&这样做的频率:

my_series
for column in df1:
   my_series=df1[column].value_counts()[1:2]
   print(my_series)

但是如何将其附加到df2?

解决方法

有柜台

from collections import Counter

def f(s):
    return pd.Series(Counter(s).most_common(2)[1],['mode2','mode2 freq'])

df1.describe().rename(dict(top='mode1',freq='mode1 freq')).append(df1.apply(f))

             name gender
count          10     10
unique          7      2
mode1       Molly      f
mode1 freq      3      7
mode2        Lisa      m
mode2 freq      2      3

value_counts

没有Counter的同样的事情

def f(s):
    c = s.value_counts()
    return pd.Series([s.iat[1],s.index[1]],freq='mode1 freq')).append(df1.apply(f))

Numpy位

def f(s):
    f,u = pd.factorize(s)
    c = np.bincount(f)
    i = np.argpartition(c,-2)[-2]
    return pd.Series([u[i],c[i]],freq='mode1 freq')).append(df1.apply(f))

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...