首页 > 解决方案 > Python,熊猫:如何将系列附加到数据框

问题描述

我有以下数据框df1:

import pandas as pd
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy', 'Lisa', 'Molly', 'Lisa', 'Molly', 'Fred'], 
             'gender': ['m', 'f', 'f', 'm', 'f', 'f', 'f', 'f','f', '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?

标签: pythonpandas

解决方案


您可以apply使用value_counts,然后我们需要修改您的数据框形状。

df1.apply(lambda x : x.value_counts().iloc[[1]]).stack().reset_index(level=0).T
Out[172]: 
         name gender
level_0  Lisa      m
0           2      3

最终输出(使用您向我们展示的内容更改索引名称rename

pd.concat([df1.describe(),df1.apply(lambda x : x.value_counts().iloc[[1]]).stack().reset_index(level=0).T])
Out[173]: 
        gender   name
count       10     10
unique       2      7
top          f  Molly
freq         7      3
level_0      m   Lisa
0            3      2

推荐阅读