如何从一个系列创建数据帧,当它不像转置对象那么简单时?



我在这里看到过很多类似的问题,但没有一个适用于我需要解决的情况。碰巧我有一个products系列,其中"future"列的名称以字符串[edit]结尾,并与将要加入其中的值混合在一起。像这样:

Index   Values
0       Soda [edit]
1       Coke
2       Sprite
3       Ice Cream [edit]
4       Nestle
5       Snacks [edit]
6       Lays
7       Act II
8       Nachos

我需要把它变成一个 df,以获得这样的 sth:

Soda     Ice Cream     Snacks
0       Coke     Nestle        Lays
1       Sprite   NaN           Act II
2       NaN      NaN           Nachos

我制作了一个名为cols_index的系列,它保存了列的索引,如第一个系列:

Index   Values
0       Soda [edit]
3       Ice Cream [edit]
5       Snacks [edit]

但是,从这里我不知道如何将值传递给列。由于我是熊猫的新手,我认为使用for循环生成范围进行迭代,该范围将引用元素的索引([1,2], [4], [6:8](,但这不是一种可推移的方式。

我该怎么做?提前谢谢。

====

=============================================================编辑:我解决了它,这是我是如何做到的。

在与同事一起审查了这个问题后,我们得出结论,没有可行的方法可以做到这一点,因此,我不得不将数据用作列表并应用forif循环:

products = pd.read_csv("products_file.txt", delimiter='n', header = None, squeeze = True)
product_list = products.values.tolist()
cols = products[products.str.contains('[edit]', case = False)].values.tolist()   # List of elements to be columns
df = []
category = product_list[0]
for item in product_list:
if item in cols:
category = item[:-6]   # Removes '[edit]' 
else:
df.append((category, item))
df = pd.DataFrame(df, columns = ['Category', 'Product'])

我们确实isin找到列名,然后用cumsumcumcount创建枢轴键,然后执行crosstab

s=df1.Values.isin(df2.Values)
df=pd.crosstab(index=s.cumsum(),
columns=s.groupby(s.cumsum()).cumcount(),
values=df1.Values,
aggfunc='first').set_index(0).T
0        Soda IceCream  Snacks
col_0                         
1        Coke   Nestle    Lays
2      Sprite      NaN   ActII
3         NaN      NaN  Nachos

最新更新