Python:根据另一列内容的第一个字符填充列

2024-06-01 00:22:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,看起来像这样:

+-----+------+
| No  | type |
+-----+------+
| 123 | C01  |
| 123 | C02  |
| 123 | T01  |
| 345 | C01  |
| 345 | H12  |
| 345 | H22  |
+-----+------+

还有一个像这样的小数组:

arr = [Car, Tree, House]

期望输出:

+-----+------+----------+
| No  | type | category |
+-----+------+----------+
| 123 | C01  | Car      |
| 123 | C02  | Car      |
| 123 | T01  | Tree     |
| 345 | C01  | Car      |
| 345 | H12  | House    |
| 345 | H22  | House    |
+-----+------+----------+

所以我想添加一个包含arr元素的列,其中第一个字符与列类型的第一个字符匹配。你知道吗

数组中每个第一个字符只有一个元素。你知道吗

实现这一目标的最佳方法是什么?我可以为每个第一个字符手动执行此操作,但我希望在一次运行中执行此操作,例如使用apply函数。你知道吗

谢谢你

马莫


Tags: 数据notree元素type数组字符car
1条回答
网友
1楼 · 发布于 2024-06-01 00:22:10

完整示例:

import pandas as pd

data = '''\
No  type
123 C01
123 C02
123 T01
345 C01
345 H12
345 H22'''

df = pd.read_csv(pd.compat.StringIO(data),sep='\s+')

arr = ['Car', 'Tree', 'House']
d = {x[0]:x for x in arr}                   # Create a map
df['category'] = df['type'].str[0].map(d)   # Apply map to str[0]

结果:

    No type category
0  123  C01      Car
1  123  C02      Car
2  123  T01     Tree
3  345  C01      Car
4  345  H12    House
5  345  H22    House

解释:

  1. 通过arr的第一个值创建字典
  2. str[0]dict选择type列的第一个值

相关问题 更多 >