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

2024-10-04 05:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想按类型列对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。有人知道怎么做吗


Tags: 数据函数dateindexvaluetypenanfirst
2条回答

只需使用groupbyfirst,但需要确保空值是np.nan,而不是像示例数据中那样的字符串:

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

让我们mask数据帧中的值,其中Value列中的值为NaN,然后groupby数据帧位于Type并使用first进行聚合:

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

   Type        Date  Value
0   1.0  05.12.1998  100.0
1   2.0  06.12.1998   20.0

相关问题 更多 >