如何在dataframe中的动态列中添加值?

2024-05-16 03:55:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表,一个是动态的columns名称,另一个是values。如何将该映射映射到我的数据帧df。对于这个,我把这些列表作为静态的。但在我的程序中,将是动态的

df = pd.DataFrame(columns = ['ABC', 'LMN', 'XYZ','PQR']
columns = ['LMN','PQR']
values = ['234','654']

到目前为止我已经试过了

for i in range(len(values)):
            df[columns[i]] = np.where(df[columns[i]] == columns[i], values[i], 0)

预期产量:-

Id  ABC  LMN  XYZ  PQR
0    0   234  0    654

Tags: columns数据程序名称dataframedf列表静态
3条回答

您可以这样尝试:

df = pd.DataFrame(columns = ['ABC', 'LMN', 'XYZ','PQR'])
columns = ['LMN','PQR']
values = ['234','654']

pd.concat([df, pd.DataFrame(columns=columns, data=[values])])

   ABC  LMN  XYZ  PQR
0  NaN  234  NaN  654

您可以从列表values中获取包含元素的熊猫系列,其中df中的所有列都作为索引,并用0填充未定义的条目,然后将其附加到df,如下所示:

s = pd.Series(data=values, index=columns).reindex(df.columns).fillna(0)
df = df.append(s, ignore_index=True)

结果:

print(df)


  ABC  LMN XYZ  PQR
0   0  234   0  654

我们使用^{},这样序列就已经有了与df的完整列集相对应的完整索引集。因此,我们可以在附加到df之前用0填充NaN


或者,我们也可以简化以下步骤:

s = pd.Series(data=values, index=columns)
df = df.append(s, ignore_index=True).fillna(0)

此版本比以前的版本更简单,无需使用^{}。但是,在.fillna()步骤中,它还将填充前面行的NaN

取决于是否要保留前几行的NaN值。如果您不需要保留前几行的NaN值,那么这是一个更简单的版本。否则,以前的版本更合适

您也可以通过append()Dataframe()fillna()方法来实现这一点:

df=df.append(pd.DataFrame(columns=columns, data=[values])).fillna(0)

如果您打印df,您将获得:

print(df)
>>>

   ABC  LMN  XYZ  PQR
0  0    234  0    654

相关问题 更多 >