按列变量拆分pandas数据帧

时间:2016-08-15 20:35:24

标签: python pandas filtering

我有一个数据框,我想通过列变量进行拆分,如下例所示:

gender height weight
male     42.8  157.5
male     41.3  165.6
female   48.4  144.2

我期望的结果是:

df_male

gender height weight
male     42.8  157.5
male     41.3  165.6

df_female

gender  height  weight
female    48.4   144.2

抓住的是我想成为的人  能够使用具有5-25个类别的变量执行此操作。

我的想法是应该有一种循环原始数据框并吐出多个数据帧的方法,但我对所有可能的解决方案开放

1 个答案:

答案 0 :(得分:5)

以下内容将生成一个列表,其中包含gender列的每个值的一个数据框:

import io
import pandas as pd

data = io.StringIO('''\
gender height weight
male     42.8  157.5
male     41.3  165.6
female   48.4  144.2
''')
df = pd.read_csv(data, delim_whitespace=True)

dfs = [rows for _, rows in df.groupby('gender')]

dfs是长度为2的列表,包含以下元素:

print(dfs[0])

#    gender  height  weight
# 2  female    48.4   144.2

print(dfs[1])

#    gender  height  weight
# 0    male    42.8   157.5
# 1    male    41.3   165.6

创建一个包含gender列中不同值的键的字典并对数据帧进行评估可能更好:

dfs = [{gender: rows for gender, rows in df.groupby('gender')}

导致以下字典:

{'female':     gender  height  weight
            2  female    48.4   144.2,
 'male':       gender  height  weight
            0    male    42.8   157.5
            1    male    41.3   165.6}