我有一个熊猫数据框(df
)和一个列表列表(mylist
),如下所示。
node, item1, item2
n1, 25, 32
n2, 28, 31
n3, 33, 35
mylist = [['n5', 32], ['n2', 18], ['n1', 12]]
我想用df
的值向我的mylist
添加一个新列,如下所示。
node, item1, item2, item3
n1, 25, 32, 12
n2, 28, 31, 18
n3, 33, 35, 0
请注意,如果节点不在mylist
中,则该值为零。
我能够检查该值是否为mylist
,如果不为零。但是,我在考虑在熊猫中是否有更简单的方法。
mylist_nodes = []
for item in mylist:
mylist_nodes.append(item[0])
#check if the node is in mylist
df["item3"] = df_features["node"].isin(mylist_nodes).astype(int)
很高兴在需要时提供更多详细信息。
答案 0 :(得分:1)
将列表转换为数据框,然后使用合并。
import pandas as pd
df = pd.DataFrame({
'node': ['n1', 'n2', 'n3'],
'item1': [25,28,33],
'item2': [32,31,35]
})
mylist = [['n5', 32], ['n2', 18], ['n1', 12]]
df2 = pd.DataFrame(mylsit, columns=['node', 'item3'])
final = df.merge(df2, how='left', on='node').fillna(0)
# final outputs:
node item1 item2 item3
0 n1 25 32 12.0
1 n2 28 31 18.0
2 n3 33 35 0.0
如果结果数据框需要item3
为整数,则可以将其强制转换为整数。在我安装的熊猫版本(0.25.2)上,它变为浮点数,因为整数不支持空值,我相信在下一个熊猫版本中该值已更改。
广播可以按照以下步骤进行:
final['item3'] = final.item3.astype('int8')