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

标签 python pandas

我的数据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)

如果只有 StateDistrict 可能的值:

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']]

关于python - 如何将 iterrows 下的功能转换为 pandas 中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55449388/

相关文章:

python - 在python中用数字替换单词中的多个字母?

python - 按值比较 2 个字典并删除一些 k, v python

python - Django 以不恰当的方式使用 LIKE?

python - 使用seaborn绘制pandas数据框系列

python - 如果任何其他列满足特定条件,如何将整个组放入 pandas 中?

python - 如何在 Pandas 中过滤分组依据

python - 通过使用函数关联多个列来填充

python - 使用 Databricks 将 Google Api 的结果写入数据湖

python - "Too many indexers"与 DataFrame.loc

python - 散点图抛出类型错误