簡體   English   中英

合並行並用 pandas 替換 NaN 值

[英]merging rows and replacing NaN values with pandas

我試圖將行彼此合並以獲得包含所有存在的值的行。 目前 df 看起來像這樣: dataframe

我想要的是這樣的:


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


我可以在下面的代碼示例中得到 output,但它看起來真的很亂。

我嘗試使用 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])

Output:

當我必須對整個數據執行此操作時。csv(每當多次發現像“20-01-2023 13:24”這樣的時間戳時)我擔心它會非常緩慢且耗時。

樣本數據作為您的數據

df = pd.DataFrame(data={
    "times":["date1","date1","date1","date1","date1"],
    "type":[1,2,3,4,5],
    "key1":[1,None,None,None,None],
    "key2":[None,"2",None,None,None],
    "key3":[None,None,3,None,None],
    "key4":[None,None,None,"val",None],
    "key5":[None,None,None,None,5],
})

解決方案

melt = df.melt(id_vars="times",
        value_vars=df.columns[1:],)

melt = melt.dropna()

pivot = melt.pivot_table(values="value", index="times", columns="variable", aggfunc=lambda x: x)

更改類型列位置

index = list(pivot.columns).index("type")
pivot = pd.concat([pivot.iloc[:,index:], pivot.iloc[:,:index]], axis=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM