Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas:生成一个Dataframe列,该列的值取决于Dataframe的另一列_Python_Pandas_Dataframe - Fatal编程技术网

Python Pandas:生成一个Dataframe列,该列的值取决于Dataframe的另一列

Python Pandas:生成一个Dataframe列,该列的值取决于Dataframe的另一列,python,pandas,dataframe,Python,Pandas,Dataframe,我试图生成一个pandas数据帧,其中一列将基于另一个数据帧中的一列的值具有数值。以下是一个例子: 我想基于dataframe df的一列生成另一个dataframe_ ipdb> df_ = pd.DataFrame({'c1':[False, True, False, True]}) ipdb> df_ c1 0 False 1 True 2 False 3 True 使用df_u生成另一个数据帧df1,列如下 ipdb> df1 col1

我试图生成一个pandas数据帧,其中一列将基于另一个数据帧中的一列的值具有数值。以下是一个例子: 我想基于dataframe df的一列生成另一个dataframe_

ipdb> df_ = pd.DataFrame({'c1':[False, True, False, True]})
ipdb> df_
      c1
0  False
1   True
2  False
3   True
使用df_u生成另一个数据帧df1,列如下

ipdb> df1
   col1  col2
0     0   NaN
1     1   0
2     2   NaN
3     3   1
这里,“col1”具有正常的索引值,“c1”在df_中为False的行中具有NaN,并且在“c1”为True的行中具有顺序递增的值

为了生成这个数据帧,下面是我尝试过的

ipdb> df_[df_['c1']==True].reset_index().reset_index()
   level_0  index    c1
0        0      1  True
1        1      3  True
然而,我觉得应该有一种更好的方法来生成具有两列的数据帧,如df1中所示。

我认为您需要从0开始计算并减去1:

另一种解决方案是通过和计算真值的出现次数,并将其分配回过滤后的数据帧:

详情:

我想你需要从0开始计算,然后减去1:

另一种解决方案是通过和计算真值的出现次数,并将其分配回过滤后的数据帧:

详情:


另一种解决办法,

df.loc[df['c1'],'col2']=range(len(df[df['c1']]))
输出:

      c1  col2
0  False   NaN
1   True   0.0
2  False   NaN
3   True   1.0

另一种解决办法,

df.loc[df['c1'],'col2']=range(len(df[df['c1']]))
输出:

      c1  col2
0  False   NaN
1   True   0.0
2  False   NaN
3   True   1.0

我认为rangelendf[df['c1']==True]应该通过rangelendf[df['c1']]]简化我认为rangelendf[df['c1']==True]应该通过rangelendf[df['c1']]简化更新,您的第二个解决方案令人印象深刻,它是len的替代方案,干杯+1@jezrael我在用你的第二种方法。新列中的值是float。有没有办法将这些值作为int类型?我尝试将dtype=np.int32作为np.arange的参数,但这也没有帮助。@GAURAVSRIVASTAVA-不幸的是没有,因为NaN值-它强制所有值浮动。可能的解决方案是将计数从1添加到1,并将NaN替换为0,如df_['col2']=df_['col2']。add1.fillna0.aTypeIntuded,您的第二个解决方案令人印象深刻,它是len的替代方案,干杯+1@jezrael我在用你的第二种方法。新列中的值是float。有没有办法将这些值作为int类型?我尝试将dtype=np.int32作为np.arange的参数,但这也没有帮助。@GAURAVSRIVASTAVA-不幸的是没有,因为NaN值-它强制所有值浮动。可能的解决方案是将计数从1添加到1,并将NaN替换为0,如df_['col2']=df_['col2'].add1.fillna0.astypeint
      c1  col2
0  False   NaN
1   True   0.0
2  False   NaN
3   True   1.0