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

时间:2018-04-02 11:20:19

标签: python pandas numpy dataframe

我有一个像这样的pandas数据框:

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

和像这样的numpy数组:

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元素的列,其中第一个charakter匹配列类型的第一个charakter。

对于每个第一个字符集,数组中都有一个元素。

实现这一目标的最佳方法是什么?我可以为每个第一个charakter手动执行此操作,但我想在一次运行中执行此操作,例如使用apply-function。

谢谢,

MAMO

1 个答案:

答案 0 :(得分:3)

完整示例:

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. 的第一个值创建字典
  3. type选择str[0]列的第一个值,dict选择map