Python Groupby,apply函数并将结果合并到dataframe中
我想按类型列对ID进行分组,并在分组股票上应用一个函数,该函数返回分组股票的值列不是NaN的第一行,并将其复制到单独的数据框中 到目前为止,我得到了以下信息: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
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