目前,我有以下数据框表:
这是我要创建的表格(所需的列以黄色突出显示):
以下是我想在代码中实现的逻辑:
我知道如何使用np.where类型的语句手动创建每个新列的慢/低效方式。
我在想...有没有一种有效的循环方式来做到这一点?任何帮助是极大的赞赏!
答案 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"/>
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只是乘以你的权重。
但您可以对列进行重新排序,以使其看起来更好。
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
我希望它有所帮助
编辑:
如果您的字段不是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)