Pandas 数据框根据元组列表创建新列

Pandas dataframe create new column based on list of tuples

考虑这个数据框:

In [0]: df = pd.DataFrame({'Num': [1, 2, 3, 4] * 5})
In [1]: len(df)
Out[1]: 20

我想根据元组列表创建一个新列:例如:

In [2]: tup = [(1, 0), (2, 1), (3, 0), (4, 1)]
In [3]: len(tup)
Out[3]: 4

其中 df['Num'] == 到元组中的第一项,我想将第二个值添加到新列。

这是所需输出的示例:

    Num    bin
 0    1      0
 1    2      1
 2    3      0
 3    4      1
 4    1      0
 5    2      1
 6    3      0
...
19    4      1

我试过这段代码来实现这个结果:

df['bin'] = [j for l in df['Num'] for i,j in tup if i == l]

结果没问题,但我收到警告:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

那么,将值复制到新数据框列的最佳方法是什么?

不确定这是否更好,但您可以将元组放入字典中并使用 applymap:

tup = [(1, 0), (2, 1), (3, 0), (4, 1)]
d = {k:v for k,v in tup}
df['bin'] = df.applymap(lambda x: d[x])

您可以使用全Pandas方法;将元组转换为数据框并将其与原始数据合并:

tuples_as_df = pd.DataFrame(tup, columns=['dummy','bin'])
df = df.merge(tuples_as_df, how='left', left_on='Num', right_on='dummy')
del df['dummy'] # The merge key, not needed anymore
#    Num  bin
#0     1    0
#1     2    1
#2     3    0
#3     4    1
#4     1    0
#5     2    1
#....