假设我有两个数据帧:
import string
import pandas as pd
d = {'one': pd.Series(range(26), index = list(string.ascii_lowercase)),
'two': pd.Series([1., 2., 3., 4.], index = ['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
d2 = {'one': pd.Series(range(10), index = range(11, 21))}
df2 = pd.DataFrame(d2)
Run Code Online (Sandbox Code Playgroud)
现在,我有一个索引列表:
np.random.seed(12)
i = np.random.choice(np.arange(11, 21), size = 26)
Run Code Online (Sandbox Code Playgroud)
现在,我想加入df2与df1基于i.
df['new_col'] = df2['one'][i]
Run Code Online (Sandbox Code Playgroud)
但是我得到了上面提到的错误.解决这个问题的一种方法是i直接添加df1,并创建一个名为iin 的列df2来表示index,然后执行a merge但看起来非常低效.有一个更好的方法吗?
我知道有几个问题有相同的标题,但没有一个对我的案例有任何帮助.
您可以使用tolist方法将您转换df2.one为列表,然后将其分配给df['new_col']:
df['new_col'] = df2['one'][i].tolist()
Run Code Online (Sandbox Code Playgroud)
编辑
或者您可以.values在评论中使用属性作为@ajcr更快:
df['new_col'] = df2['one'][i].values
Run Code Online (Sandbox Code Playgroud)
定时
In [100]: %timeit df2.one[i].tolist()
1000 loops, best of 3: 275 µs per loop
In [101]: %timeit df2.one[i].values
1000 loops, best of 3: 252 µs per loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11736 次 |
| 最近记录: |