[英]Populate a panda's dataframe column based on another column and dictionary value
我有一个数据框,其中包含一个名为 DIAGNOSES 的列。 此 DIAGNOSES 列包含 1 个或多个字符串的列表,以字符开头。
我想检查 DIAGNOSES 中每一行的第一个字符并获取它的第一个字符以从字典中查找它以使用这些值填充 DIAGNOSES_TYPE 列。
最小的例子:
diagnoses = {'A': 'Arbitrary', 'B': 'Brutal', 'C': 'Cluster', 'D': 'Dropped'}
df = pd.DataFrame({'DIAGNOSES': [['A03'], ['A03', 'B23'], ['A30', 'B54', 'D65', 'C60']]})
DIAGNOSES
0 [A03]
1 [A03, B23]
2 [A30, B54, D65, C60]
一点可视化来澄清我想要得到的东西,我想要填充 df['DIAGNOSES_TYPES'] :
我是这样处理的:
def map_diagnose(df)
for col in len(range(df)):
for d in df['DIAGNOSIS']:
for diag in d:
if diag[0] in diagnoses_dict.keys():
df['DIAGNOSES_TYPES'] = diagnoses_dict.get(diag[0])
df['DIAGNOSES_TYPES'] = ''
return df
使用explode
, map
和groupby
:
diagnoses = {'A': 'Arbitrary', 'B': 'Brutal', 'C': 'Cluster', 'D': 'Dropped'}
df1 = df.explode('DIAGNOSES')
df1['SD'] = df1['DIAGNOSES'].str.extract('(\D)')
df1['DIAGNOSES_TYPES'] = df1['SD'].map(diagnoses)
df1.groupby(level=0).agg(list)
output:
DIAGNOSES SD DIAGNOSES_TYPES
0 [A03] [A] [Arbitrary]
1 [A03, B23] [A, B] [Arbitrary, Brutal]
2 [A30, B54, D65, C60] [A, B, D, C] [Arbitrary, Brutal, Dropped, Cluster]
列'SD'是每个用于映射的dagnoses的第一个字母; 如果不需要,您可以drop
此列
您可以展开“诊断”列,使用str
获取每个字符串的第一个元素, explode
diagnoses
字典以获取类型,按索引groupby
并聚合到列表:
df['DIAGNOSES_TYPE'] = df['DIAGNOSES'].explode().str[0].map(diagnoses).groupby(level=0).apply(list)
Output:
DIAGNOSES DIAGNOSES_TYPE
0 [A03] [Arbitrary]
1 [A03, B23] [Arbitrary, Brutal]
2 [A30, B54, D65, C60] [Arbitrary, Brutal, Dropped, Cluster]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.