[英]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
然后將索引更改為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
然后像這樣
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
最后更改列名並刪除無值的行
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.