Python 如何使用另一个函数中的dataframe对象?
我有3个功能;一个用于处理具有4列(MemberID、year、DSFS和DrugCount)的数据帧并返回3个按年份分类的数据帧的函数,一个用于重新格式化年份的辅助函数,第三个用于按年份分类重新编码数据帧Python 如何使用另一个函数中的dataframe对象?,python,pandas,dataframe,categorization,Python,Pandas,Dataframe,Categorization,我有3个功能;一个用于处理具有4列(MemberID、year、DSFS和DrugCount)的数据帧并返回3个按年份分类的数据帧的函数,一个用于重新格式化年份的辅助函数,第三个用于按年份分类重新编码数据帧 如何将按年份分类的数据帧作为第三个函数的输入 我想使用df['DSFS'].unique()查找唯一类别的列表。我将使用什么作为我的df csv文件的示例 MemberID DSFS药量 2 61221204 2-3个月1 8 30786520 1-2个月1 11 28420460 10
- 如何将按年份分类的数据帧作为第三个函数的输入
- 我想使用
查找唯一类别的列表。我将使用什么作为我的df['DSFS'].unique()
df
MemberID DSFS药量
2 61221204 2-3个月1
8 30786520 1-2个月1
11 28420460 10-11个月1
12 11861003 4-5个月1
14 66905595 6-7个月4
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
我对您的示例并不十分清楚,但这里有一个基于pandas文档的稍有不同的示例,它演示了一些有用的技术: 听起来,与其使用groupby,不如使用df.pivot_表来重塑为多索引 例如,尝试:
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()
使用打印df.pivot_表(索引=(“变量”、“日期”))
然后您可以进行df_旋转。loc['A']为您提供:
value
date
2000-01-03 -0.357495
2000-01-04 0.367520
2000-01-05 2.216699
您可以使用几年的时间轻松地将其应用于您的示例。对于这种类型的操作,它比使用GROUPBY更容易,并且它将所有数据保存在一个数据帧(视图)中
您还可以使用value_counts查找所有值及其频率。在我的例子中:
df['variable'].value_counts()
将返回一个系列:
D 3
B 3
C 3
A 3
Name: variable, dtype: int64
如果我理解正确的话,这个系列的索引就是你的唯一值列表。所以
list(df['variable'].value_counts().index)
应该给你想要的 能否添加
DrugCount.csv
的样本?
D 3
B 3
C 3
A 3
Name: variable, dtype: int64
list(df['variable'].value_counts().index)