Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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 Groupby,apply函数并将结果合并到dataframe中_Python_Pandas_Dataframe - Fatal编程技术网

Python Groupby,apply函数并将结果合并到dataframe中

Python Groupby,apply函数并将结果合并到dataframe中,python,pandas,dataframe,Python,Pandas,Dataframe,我想按类型列对ID进行分组,并在分组股票上应用一个函数,该函数返回分组股票的值列不是NaN的第一行,并将其复制到单独的数据框中 到目前为止,我得到了以下信息: dummy data: df1 = {'Date': ['04.12.1998','05.12.1998','06.12.1998','04.12.1998','05.12.1998','06.12.1998'], 'Type': [1,1,1,2,2,2], 'Value': ['NaN', 1

我想按类型列对ID进行分组,并在分组股票上应用一个函数,该函数返回分组股票的值列不是NaN的第一行,并将其复制到单独的数据框中

到目前为止,我得到了以下信息:

dummy data: 

df1 = {'Date': ['04.12.1998','05.12.1998','06.12.1998','04.12.1998','05.12.1998','06.12.1998'],
        'Type': [1,1,1,2,2,2],
           'Value': ['NaN', 100, 120, 'NaN', 'NaN', 20]}
df2 = pd.DataFrame(df1, columns = ['Date', 'Type', 'Value'])

print (df2)
         Date  Type Value
0  04.12.1998     1   NaN
1  05.12.1998     1   100
2  06.12.1998     1   120
3  04.12.1998     2   NaN
4  05.12.1998     2   NaN
5  06.12.1998     2    20

import pandas as pd

selectedStockDates = {'Date': [], 'Type': [], 'Values': []}
selectedStockDates = pd.DataFrame(selectedStockDates, columns = ['Date', 'Type', 'Values'])

first_valid_index = df2[['Values']].first_valid_index()

selectedStockDates.loc[df2.index[first_valid_index]] = df2.iloc[first_valid_index]


上面的代码应该适用于第一个id,但我很难将其应用于数据帧中的所有id。有人知道怎么做吗?

只需先使用
groupby
first
,但您需要确保空值是
np.nan
,而不是示例数据中的字符串:

df2.groupby('Type')['Value'].first()

让我们
mask
数据框中的值,其中
Value
列中的值为
NaN
,然后
groupby
上键入
并使用
首先进行聚合:

df2['Value'] = pd.to_numeric(df2['Value'], errors='coerce')
df2.mask(df2['Value'].isna()).groupby('Type', as_index=False).first()


谢谢,这有助于找到每个股票的第一个日期。但我最初的想法是将指数保留在新的数据框中,稍后简单地加上+7,以找到一只股票的第7个值。例如,谢谢,这有助于找到每只股票的第一个日期。我最初的想法是将指数保留在新的数据框架中,简单地将+7添加到指数中,以找到一只股票的第7个值。我已经澄清了我上面的例子。@Rbeginner在这种情况下,我认为你可以做类似于
df2.reset_index().mask(df2['Value'].isna()).groupby('Type',as_index=False.).first().set_index('index')
如何使用你的注释代码获得该股票的第七个交易日?那么在代码行的哪一行我可以加上+7,这样索引加起来就是第7天?提前谢谢大家的讨论
   Type        Date  Value
0   1.0  05.12.1998  100.0
1   2.0  06.12.1998   20.0