Как мне использовать объект dataframe из другой функции?
У меня есть 3 функции; тот, который обрабатывает фрейм данных с 4 столбцами (MemberID, year, 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
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
1 ответ
Ваш пример был не очень понятен для меня, но вот немного другой пример, основанный на документах pandas, который демонстрирует некоторые полезные методы:
Похоже, вместо использования groupby вы должны использовать df.pivot_table для преобразования в мультииндекс.
Например, попробуйте:
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():
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=("variable","date"))
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_pivoted.loc['A'] дает вам:
value
date
2000-01-03 -0.357495
2000-01-04 0.367520
2000-01-05 2.216699
Вы можете легко приспособить это к своему примеру, используя годы. Это проще, чем использовать group by для этого типа манипуляций, и он хранит все данные в одном кадре данных (представление).
Вы также можете использовать value_counts, чтобы найти все значения и их частоты. Итак, в моем примере:
df['variable'].value_counts()
вернет серию:
D 3
B 3
C 3
A 3
Name: variable, dtype: int64
Здесь индекс этой серии - ваш список уникальных значений, если я правильно понял. так
list(df['variable'].value_counts().index)
Должен дать вам то, что вы хотите.