我正在使用熊猫并有一个看起来像这样的 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
为无。您可以将其存储在新列中。
此解决方案假定每个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步。你可以在这里阅读它。
第 3 步:
最后删除所有包含至少一个的行None
:
df.dropna()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句