簡體   English   中英

使用熊貓python重新排列csv中的行值

[英]rearrange rows values in csv using pandas python

我正在使用熊貓並且有一個看起來像這樣的csv文件

  ID                Name        Store      Price           
Melbourne           
    1               aaaa        bbbb        570
    2               cccc        dddd        236
    3               eeee        ffff        230
Sydney
    1               hhhh        gggg        2300
    2               kkkk        llll        266

我想要這樣的形狀

City            ID               Name        Store       Price      
Melbourne        1               aaaa        bbbb        570
Melbourne        2               cccc        dddd        236
Melbourne        3               eeee        ffff        230
Sydney           1               hhhh        gggg        23
Sydney           2               kkkk        llll        266

我在想的是
1.添加新列

  ID        New               Name        Store      Price           
Melbourne   NaN  
    1       NaN               aaaa        bbbb        570
    2       NaN               cccc        dddd        236
    3       NaN               eeee        ffff        230
Sydney 
    1       NaN               hhhh        gggg        2300
    2       NaN               kkkk        llll        266
  1. 然后將索引更改為ID。 所以看起來像這樣

      ID New Name Store Price Melbourne NaN 1 NaN aaaa bbbb 570 2 NaN cccc dddd 236 3 NaN eeee ffff 230 Sydney NaN 1 NaN hhhh gggg 2300 2 NaN kkkk llll 266 
  2. 然后像這樣

      ID New Name Store Price Melbourne NaN Melbourne 1 aaaa bbbb 570 Melbourne 2 cccc dddd 236 Melbourne 3 eeee ffff 230 Sydney NaN Sydney 1 hhhh gggg 2300 Sydney 2 kkkk llll 266 
  3. 最后更改列名並刪除無值的行

     City ID Name Store Price Melbourne 1 aaaa bbbb 570 Melbourne 2 cccc dddd 236 Melbourne 3 eeee ffff 230 Sydney 1 hhhh gggg 2300 Sydney 2 kkkk llll 266 

    我不確定它是否可以實施。 請給我一些有關如何實現這一點的想法。

有幾種方法可以執行此操作,以下是有關如何實現建議的方法的一些想法。

第1步:

使用str.isalpha()方法檢查字符串是否僅包含字母字符:

df["column"].apply(lambda x: x if x.isalpha() else None)

上面的代碼將返回一個Series ,其ID列中的數字值為None。 您可以將其存儲在新列中。

該解決方案假定每個x是一個字符串。


如果您不確定該列中的所有數字是否都是字符串,則可以創建一個城市列表:

my_cities = ['Melbourne', 'Sydney']

然后檢查您列中的值是否為城市,並將其存儲在布爾Series

is_city = df['column'].isin(my_cities)

應用Series作為遮罩,並用None替換值:

df.loc[~is_city, 'column'] = None

(請注意, ~表示“不是”,因此它將返回其中值“不是城市”的行)。

第2步:

使用ffill方法填充新列:

df["new_column"].fillna(method="ffill")

ffill基本上執行問題的第3步。 你可以在這里閱讀。

第三步:

最后刪除所有至少包含一個None行:

df.dropna()

暫無
暫無

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

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