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

2024-10-02 16:23:09 发布

您现在位置: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
    

    我不确定它是否可以实施。请给我一些关于如何实现这一点的想法。


Tags: storenameidnanpriceccccsydneyaaaa
1条回答
网友
1楼 · 发布于 2024-10-02 16:23:09

有几种方法可以做到这一点,下面是一些关于如何实现您提出的方法的想法。你知道吗

第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

(请注意,~表示“not”,因此这将返回值为“not a city”的行)。你知道吗

第2步:

使用ffill方法填充新列:

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

ffill基本上完成了问题的第三步。你可以看看here。你知道吗

第3步:

最后删除至少包含一个None的所有行:

df.dropna()

相关问题 更多 >