【问题标题】:merging rows and replacing NaN values with pandas合并行并用熊猫替换 NaN 值
【发布时间】:2023-01-23 02:57:05
【问题描述】:

我正在尝试将行彼此合并以获得包含所有存在的值的行。目前 df 看起来像这样: dataframe

我想要的是这样的:


| index | scan .. | snel. | kool .. | note ..  |
| ----- | ------- | ----- | ------- | -------  |
| 0     | 7,8     | 4,0   | 20.0    | Fiasp, ..|


我可以在下面的代码示例中获得该输出,但它看起来真的很乱。

我尝试使用 groupby、agg、sum、max,所有这些都是删除列,看起来像这样: df2.groupby('Tijdstempel apparaat').max().reset_index()

我尝试用前几行的值填充该行,然后删除不包含每个值的行。但这似乎是一项漫长的工作,而且非常混乱。

df2 = df2.loc[df['Tijdstempel apparaat'] == '20-01-2023 13:24']
df2 = df2.reset_index()
del df2['index']
df2['Snelwerkende insuline (eenheden)'].fillna(method='pad', inplace=True)
df2['Koolhydraten (gram)'].fillna(method='pad', inplace=True)
df2['Notities'].fillna(method='pad', inplace=True)
df2['Scan Glucose mmol/l'].fillna(method='pad', inplace=True)
print(df2)
# df2.loc[df2[0,'Snelwerkende insuline (eenheden)']] = df2.loc[df2[1, 'Snelwerkende insuline (eenheden)']]
df2.drop([0, 1, 2])

输出:

当我必须对整个 data.csv 执行此操作时(每当多次发现像“20-01-2023 13:24”这样的时间戳时)我担心它会非常缓慢且耗时。

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    样本数据作为您的数据

    df = pd.DataFrame(data={
        "times":["date1","date1","date1","date1","date1"],
        "type":[1,2,3,4,5],
        "key1":["val1",None,None,None,None],
        "key2":[None,"val2",None,None,None],
        "key3":[None,None,"val3",None,None],
        "key4":[None,None,None,"val4",None],
        "key5":[None,None,None,None,"val5"],
    })
    print(df)
    print("#======================================================================")
    

    解决方案

    df = df.melt(
        id_vars="times",
        value_vars=df.columns[1:]
    )
    
    print(df)
    print("#======================================================================")
    
    df = df.pivot_table(index="times", columns="variable", values="value", aggfunc=lambda x: x).applymap(lambda x: ",".join([str(val) for val in x if val]))
    
    # change types location
    index = list(df.columns).index("type")
    change_df_type = pd.concat([df.iloc[:,index:], df.iloc[:,:index]], axis=1)
    
    print(change_df_type)
    print("#======================================================================")
    

    【讨论】:

      猜你喜欢
      • 2020-10-12
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      相关资源
      最近更新 更多