比较列表值与列名pandas

hvvq6cgz  于 2023-08-01  发布在  其他
关注(0)|答案(3)|浏览(130)

我需要比较列表中的值是否可以作为数据框架的列名。如果缺少一个值,在df中添加一个新列。假设我有一个列表和df作为
lst = ['Items',' model ',' quantity','price']

Items model price
Phone 2023   200
xyzzy 2022   120

字符串
在上面的场景中,列表中的“数量”在df中不可用,我想在df中添加缺少的作为一个新的列填充了0,就像

Items  model quantity price
Phone  2023     0         200
xyzzy  2022     0         120

2ledvvac

2ledvvac1#

希望这就足够了:

for elem in lst:
    if elem not in df.columns:
        df[elem] = 0

字符串

lawou6xi

lawou6xi2#

只需reindex

out = df.reindex(columns=lst, fill_value=0)

字符串
输出量:

Items  model  quantity  price
0  Phone   2023         0    200
1  xyzzy   2022         0    120


或者使用Index.symmetric_difference将列添加到位:

df[df.columns.symmetric_difference(lst)] = 0

# or in case not all names are in lst
df[pd.Index(lst).difference(df.columns)] = 0


输出量:

Items  model  price  quantity
0  Phone   2023    200         0
1  xyzzy   2022    120         0

mf98qq94

mf98qq943#

您可以计算列中的差异,然后创建一个零df与原始df连接:

additional_cols = list(set(lst).difference(set(df.columns)))
        
df = pd.concat(
    [
        df,
        pd.DataFrame(
            np.zeros(shape=(df.shape[0], len(additional_cols))),
            columns=additional_cols
        )
    ],
    axis=1
)
print(df)

字符串
输出量:

Items  model  price  quantity
0      1      2      4       0.0

相关问题