我有一个包含两列的数据框。一列包含不同的类别,另一列包含值。
df = pd.DataFrame({'a':[np.nan,2,3,4,5],'b':[6,7,8,9,np.nan],'c':[5,4,3,2,1]})
df2 = (df >> mask((X.a.isnull()) | (X.b.notnull())))
print(df2)
a b c
0 NaN 6.0 5
1 2.0 7.0 4
2 3.0 8.0 3
3 4.0 9.0 2
我希望将不同类别分为以下栏目。
所需的输出:
import pandas as pd
data={"category":["Topic1","Topic2","Topic3","Topic2","Topic1","Topic3"], "value":["hello","hey","hi","name","valuess","python"]}
df=pd.DataFrame(data=data)
我尝试使用转置数据框,但未获得预期结果。
答案 0 :(得分:3)
您可以在axis=1
中使用pandas.concat
。这也适用于长度不匹配的情况。
grouper = df.groupby('category')
df = pd.concat([pd.Series(v['value'].tolist(), name=k) for k, v in grouper], axis=1)
print(df)
Topic1 Topic2 Topic3
0 hello hey hi
1 valuess name python
答案 1 :(得分:3)
s = df.groupby('category')['value'].apply(list)
s.apply(pd.Series).T
category Topic1 Topic2 Topic3
0 hello hey hi
1 valuess name python
答案 2 :(得分:0)
使用pivot
和cumcount
(用于创建帮助键)
df.assign(key=df.groupby('category').cumcount()).pivot('key','category','value')
Out[381]:
category Topic1 Topic2 Topic3
key
0 hello hey hi
1 valuess name python