python - 更多pythonic方式来编辑列值 - python pandas
问题描述
我觉得必须有一种更 Pythonic 的方式(即:更简单、更直接)来更改我正在使用的数据框中的列值。基本上,我正在尝试match
根据“ID”列的值来编辑列的值。
举个例子:
data = [['tom', 10, 111], ['nick', 15, 112], ['juli', 14, 113], ['mary', 17, 114]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['Name', 'Age', 'ID'])
我有一个简单的数据框,df
现在我制作了几片数据框
df2 = df.loc[df['ID'] == 111]
df3 = df.loc[df['ID'] == 112]
df4 = df.loc[df['ID'] == 113]
df5 = df.loc[df['ID'] == 114]
我想要做的是在我的原始数据框中创建一个新列(称为“匹配”)。然后我想根据 ID 列比较df2
, df3
, df4
, 。df5
在“匹配”列中,我将记录这些匹配发生的时间。让我逐步完成我的过程。
如果我这样做...
df['match_checker'] = df2['ID'].isin(df['ID'])
df.loc[df['match_checker'] == True, 'match'] = 'Round 1'
df['match_checker'] = df3['ID'].isin(df['ID'])
df.loc[df['match_checker'] == True, 'match'] = 'Round 2'
df['match_checker'] = df4['ID'].isin(df['ID'])
df.loc[df['match_checker'] == True, 'match'] = 'Round 3'
df['match_checker'] = df5['ID'].isin(df['ID'])
df.loc[df['match_checker'] == True, 'match'] = 'Round 4'
生成的数据框如下所示。这是期望的结果。(match_checker 列将随着每次迭代而改变)。
Name Age ID match_checker match
0 tom 10 111 NaN Round 1
1 nick 15 112 NaN Round 2
2 juli 14 113 NaN Round 3
3 mary 17 114 True Round 4
我有想要的结果,但是创建数据框的一个子集,然后将其与原始数据框进行比较似乎是一种不好的方法。
注意 我不是在寻找以下解决方案:
df.loc[df['ID'] == 111), 'match'] = 'Round 1'
解决方案
这个怎么样:
rounds = {
111: 'Round 1',
112: 'Round 2',
113: 'Round 3',
114: 'Round 4',
}
df['match'] = [rounds[i] for i in df.ID]
Name Age ID match
0 tom 10 111 Round 1
1 nick 15 112 Round 2
2 juli 14 113 Round 3
3 mary 17 114 Round 4
推荐阅读
- javascript - 扩展状态反应
- javascript - html2canvas 未捕获(承诺)未定义
- docker - 当 docker-compose 有端口映射时,Traefik 无法到达后端
- python - 尝试将 python 脚本放在一起,在每周开始时通过电子邮件向我发送一周的事件
- angular - 如何使用angular2在正文上附加内容
- ruby - 必发 API 输出时区有时会关闭
- c# - 更改源集合时如何选择 CollectionViewSource 中的第一项?
- python - 在 Windows 中关闭蓝牙
- python - #python products #barcode_recognition /将结果保存到Excel文件
- angular - 如何避免输入类型文件添加多个文件?