Skip to main content
 首页 » 编程设计

python之如何将 iterrows 下的功能转换为 pandas 中的一行

2025年05月04日20TianFang

我的数据1如下:

[ 
{"cut_id":1,"cut_label":"v024","cut_name":"State","value_label":"1","value":"andaman and nicobar islands"}, 
{"cut_id":3,"cut_label":"v024","cut_name":"State","value_label":"3","value":"arunachal pradesh"}, 
{"cut_id":635,"cut_label":"sdistri","cut_name":"District","value_label":"599","value":"pathanamthitta"}, 
{"cut_id":636,"cut_label":"sdistri","cut_name":"District","value_label":"600","value":"kollam"}, 
{"cut_id":637,"cut_label":"sdistri","cut_name":"District","value_label":"601","value":"thiruvananthapuram"} 
] 

我想要的输出如下:

[ 
{"value_label":"S1","value":"andaman and nicobar islands"}, 
{"value_label":"S3","value":"arunachal pradesh"}, 
{"value_label":"D599","value":"pathanamthitta"}, 
{"value_label":"D600","value":"kollam"}, 
{"value_label":"D601","value":"thiruvananthapuram"} 
] 

我的意图是通过在数字后面附加字符“S”或“D”来重命名值标签,具体取决于它是州还是地区。

这是我的代码:

for _, r in data[ 
        (data['cut_name'] == 'State') | (data['cut_name'] == 'District')][ 
            ['cut_name', 'value', 'value_label'] 
    ].iterrows(): 
    cuts_data[r.cut_name[0]+r.value_label] = r.value 

我得到了预期的结果,但是有没有办法在一行中做到这一点

请您参考如下方法:

将 str 与索引一起使用以获得 cut_name 的第一个值,并在必要时通过 Series.isin 过滤它:

mask = data['cut_name'].isin(['State','District']) 
data.loc[mask, 'value_label'] = data['cut_name'].str[0] + data['value_label'].astype(str) 

如果只有 State 或 District 可能的值:

data['value_label'] = data['cut_name'].str[0] + data['value_label'].astype(str) 

为了提高性能,可以使用列表理解(工作良好是非缺失值):

data['value_label'] = [c[0] + str(v) for c, v in zip(data['cut_name'], data['value_label'])] 

如果需要带有过滤列的新 DataFrame:

new_df = data[['value','value_label']]