我有一个看起来像这样的数据框
Column1-Column2
a - 12
b - t1
c - t3
d - 798
a - 87
b - g1
a - 478
c - f1
d - 906
我想得到一个像这样的数据框:
Columns:
a, b, c, d
Rows:
12, t1, t3, 798
87, g1, -, -
478, -, f1, 906
基本上,我想对列进行重复数据删除并填充关联的行数据。
非常感谢!
答案 0 :(得分:0)
假设您的行始终具有“a”列值,您可以这样执行:
#standard imports
import pandas as pd
initial = pd.DataFrame(
{
'Column1' : [
'a',
'b',
'c',
'd',
'a',
'b',
'a',
'c',
'd'
],
'Column2':[
'12',
't1',
't3',
'798',
'87',
'g1',
'478',
'f1',
'906'
]
}
)
pivoted = initial.pivot(columns='Column1', values='Column2')
target = pivoted.groupby(pivoted.apply(lambda x: 1 if x[0]!=None else 0, axis=1).cumsum())[pivoted.columns].agg(lambda x: ''.join([el for el in x if el!=None]))
如果你可以错过'a'值,那么它会变得更加棘手。这就是为什么在你的问题中提供代表性的例子非常重要。
编辑:
迭代方法,如果你可以在一行中有不存在的'a'值:
#use `initial` dataframe from answer above
target = pd.DataFrame(columns=['a', 'b', 'c', 'd'])
newrow = dict()
for index, row in initial.iterrows():
if row['Column1'] in newrow:
target=target.append(newrow, ignore_index=True)
newrow=dict()
newrow[row['Column1']]=row['Column2']
target=target.append(newrow, ignore_index=True)