回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个数据帧,其中每个序列都填充了0和1,如下所示:</p>
<pre><code>flagdf=pd.DataFrame({'a':[1,0,1,0,1,0,0,1], 'b':[0,0,1,0,1,0,1,0]})
</code></pre>
<p>现在,根据我所做的一些分析,我需要将一些0更改为1。因此最终的数据帧将是:</p>
<pre><code>final=pd.DataFrame({'a':[1,1,1,0,1,1,1,1], 'b':[1,1,1,0,1,1,1,1]})
</code></pre>
<p>显示必须更改的0的分析结果存储在使用多索引构建的第二个数据帧中:</p>
<pre><code> first last
a 1 1 1
5 5 6
b 0 0 1
5 5 5
7 7 7
</code></pre>
<p>对于每个“a”和“b”,我都有需要更改的0的第一个和最后一个索引。你知道吗</p>
<p>第一个问题:多索引数据帧中的第二个索引等于序列“First”。我最初试图直接使用它,但我发现处理两个序列比处理索引和序列更容易。我错过什么了吗?你知道吗</p>
<p>以下是执行此任务的代码:</p>
<pre><code>def change_one_value_one_column(flagdf,col_name,event):
flagdf[col_name].iloc[event]=1
def change_val_column(col_name, tochange, flagdf):
col_tochange=tochange.ix[col_name]
tomod=col_tochange[['first','last']].values
iter_tomod=[xrange(el[0],el[1]+1) for el in tomod]
[change_one_value_one_column(flagdf,col_name,event) for iterel in iter_tomod for event in iterel]
[change_val_colmun(col_name) for col_name in flagdf.columns]
</code></pre>
<p>第二个问题:我真的认为列表理解总是好的,但是在这种情况下,当我为列表理解编写一个函数时,我有一些疑问。这真的是最好的选择吗?你知道吗</p>
<p>第三个问题:我认为这段代码是相当python的,但我并不为此感到骄傲,因为最后一个列表理解是在dataframe系列中运行的:在我看来,使用apply方法会更好(但我不知道怎么做)。没有什么真正的理由(除了优雅)我应该努力做这些改变吗?你知道吗</p>