我有一个像这样的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
答案 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
<强>解释强>:
arr
type
选择str[0]
列的第一个值,dict
选择map