首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用来自另一个函数的dataframe对象?

如何使用来自另一个函数的dataframe对象?
EN

Stack Overflow用户
提问于 2016-04-07 02:42:55
回答 1查看 302关注 0票数 0

我有3个函数;一个处理带有4列(MemberID、have、DSFS和DrugCount)的数据文件,并返回按年份分类的3个数据格式、一个重新格式化年份的辅助函数,以及第三个按年份对数据进行绝对重新编码的函数。

  • 如何将按年份分类的数据作为第三个函数的输入?
  • 我希望使用df['DSFS'].unique()找到唯一类别的列表。我会用什么作为我的df

csv文件的示例。

MemberID DSFS DrugCount 2 61221204 2- 3 months 1 8 30786520 1- 2 months 1 11 28420460 10-11 months 1 12 11861003 4- 5 months 1 14 66905595 6- 7 months 4

代码语言:javascript
复制
def process_DrugCount(drugcount):
    dc = pd.read_csv("DrugCount.csv")
    sub_map = {'1' : 1, '2':2, '3':3, '4':4, '5':5, '6':6, '7+' : 7}
    dc['DrugCount'] = dc.DrugCount.map(sub_map)
    dc['DrugCount'] = dc.DrugCount.astype(int)
    dc_grouped = dc.groupby(dc.Year, as_index=False)
    DrugCount_Y1 = dc_grouped.get_group('Y1')
    DrugCount_Y2 = dc_grouped.get_group('Y2')
    DrugCount_Y3 = dc_grouped.get_group('Y3')
    DrugCount_Y1.drop('Year', axis=1, inplace=True)
    DrugCount_Y2.drop('Year', axis=1, inplace=True)
    DrugCount_Y3.drop('Year', axis=1, inplace=True)
    return (DrugCount_Y1,DrugCount_Y2,DrugCount_Y3)

def replaceMonth(string):
    replace_map = {'0- 1 month' : "0_1", "1- 2 months": "1_2", "2- 3 months": "2_3", "4- 5 months": "4_5", "5- 6 months": "5_6", "6- 7 months": "6_7", "7- 8 months" : "7_8",\
                   "8- 9 months": "8_9", "9-10 months": "9_10", "10-11 months": "10_11", "11-12 months": "11_12"}
    a_new_string = string.map(replace_map)
    return a_new_string

def process_yearly_DrugCount(aframe):
    processed_frame = None
    dc = pd.read_csv("DrugCount.csv")
    sub_map = {'1' : 1, '2':2, '3':3, '4':4, '5':5, '6':6, '7+' : 7}
    dc['DrugCount'] = dc.DrugCount.map(sub_map)
    dc['DrugCount'] = dc.DrugCount.astype(int)
    dc_grouped = dc.groupby(dc.Year, as_index=False)
    DrugCount_Y1 = dc_grouped.get_group('Y1')
    DrugCount_Y1.drop('Year', axis=1, inplace=True)
    # print DrugCount_Y1['DSFS'].unique
    return processed_frame
EN

回答 1

Stack Overflow用户

发布于 2016-04-07 15:47:42

在我看来,您的例子并不十分清楚,但下面是一个基于熊猫文档的略有不同的示例,演示了一些有用的技术:

听起来,与其使用groupby,不如使用df.pivot_table将其重塑为多个索引。

例如:尝试:

代码语言:javascript
复制
import pandas.util.testing as tm; tm.N = 3
def unpivot(frame):
    N, K = frame.shape
    data = {'value' : frame.values.ravel('F'),
            'variable' : np.asarray(frame.columns).repeat(N),
            'date' : np.tile(np.asarray(frame.index), K)}
    return pd.DataFrame(data, columns=['date', 'variable', 'value'])

df = unpivot(tm.makeTimeDataFrame())

若要进行测试df,请比较df.head():

代码语言:javascript
复制
        date variable     value
0 2000-01-03        A -0.357495
1 2000-01-04        A  0.367520
2 2000-01-05        A  2.216699
3 2000-01-03        B -0.417521
4 2000-01-04        B -1.163966

使用打印df.pivot_table(index=(“变量”,“日期”))

代码语言:javascript
复制
                        value
variable date                
A        2000-01-03 -0.357495
        2000-01-04  0.367520
        2000-01-05  2.216699
B        2000-01-03 -0.417521
        2000-01-04 -1.163966
        2000-01-05 -0.774422
C        2000-01-03  0.560017
        2000-01-04  0.174880
        2000-01-05  0.625167
D        2000-01-03 -1.673194
        2000-01-04 -0.075789
        2000-01-05 -2.041236

然后,您可以执行df_枢轴. You‘给您:

代码语言:javascript
复制
            value
date                
2000-01-03 -0.357495
2000-01-04  0.367520
2000-01-05  2.216699

您可以很容易地将其调整到使用年份的示例中。它比使用group进行这种类型的操作更容易,而且它将所有数据保存在一个dataframe (视图)中。

您还可以使用value_counts查找所有值及其频率。所以在我的例子中:

代码语言:javascript
复制
df['variable'].value_counts()

将返回一个系列:

代码语言:javascript
复制
D    3
B    3
C    3
A    3
Name: variable, dtype: int64

这里,该系列的索引是您的唯一值列表,如果我理解正确的话。所以

代码语言:javascript
复制
list(df['variable'].value_counts().index)   

应该给你你想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36465797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档