Python:基于现有字段中的值有效地在Dataframe中创建新字段

时间:2017-07-03 00:20:20

标签: python loops pandas dataframe field

目前,我有以下数据框表:

enter image description here

这是我要创建的表格(所需的列以黄色突出显示):

enter image description here

以下是我想在代码中实现的逻辑:

  • 为表中的每个现有列创建一个新列,并将_Weight添加到列名中。
  • 如果列值不为null,则为每个非空行分配一定数量的点(在我的示例50中为Advisor_Weight列,100为其他行)。

我知道如何使用np.where类型的语句手动创建每个新列的慢/低效方式。

我在想...有没有一种有效的循环方式来做到这一点?任何帮助是极大的赞赏!

1 个答案:

答案 0 :(得分:0)

如果您在Pandas DataFrame中拥有此数据,那么它非常简单:

这是我的样本df:

<WindowChrome.WindowChrome>
    <WindowChrome GlassFrameThickness="0,0,0,1" ResizeBorderThickness="2,0,2,2" />
</WindowChrome.WindowChrome>

<Objects:WindowButtons x:Name="WinButtons" Grid.Column="5" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,0,0,0" Grid.ColumnSpan="2"/>

enter image description here

df = pd.DataFrame([[np.NaN, np.NaN, np.NaN],['Significant',np.NaN, np.NaN],[np.NaN, "Yes", np.NaN], ["Significant", np.NaN, "Top Advisor"]], columns=['Advisor', 'Retirement', 'Recognition'])

首先,我通过将列分配给其中一个列来指定哪些列值多少。

~df [col] .isnull()这会检查value是否为null,如果True只是乘以你的权重。

之后,DataFrame看起来像这样: enter image description here

但您可以对列进行重新排序,以使其看起来更好。

columns_50_points = [df.columns[0]]
columns_100_points = df.columns[1:]

for col in columns_50_points:
    df[col+"_Weight"] = ~df[col].isnull() * 50

for col in columns_100_points:
    df[col+"_Weight"] = ~df[col].isnull() * 100

enter image description here

我希望它有所帮助

编辑:

如果您的字段不是NaN而只是空字符串,则可以用NaN替换它们。要这样做,只需应用此:

df.reindex_axis(sorted(df.columns), axis=1)

首先修剪每个字符串,然后用NaN替换。如果在那之后你想回到空字符串,它就像

一样简单
df = df.apply(lambda x: x.str.strip(), axis=1).replace("", np.NaN)

如果您的nans也是字符串,只需将其添加到替换方法中的字符串,如下所示:replace([&#34;&#34;,&#34; nan&#34;],np.NaN)