pandas Python中的DataFrame转换

rdrgkggo  于 2023-06-20  发布在  Python
关注(0)|答案(3)|浏览(118)

我正在尝试在Python中转换 Dataframe -如果可以的话,很高兴使用Pandas或NumPy
原始的数据框看起来像这样

A        B        D     E 
foo-1    bar-6    C1    11
foo-2    bar-5    C2    12
foo-3    bar-4    C1    13
foo-4    bar-3    C1    14
foo-5    bar-2    C2    15
foo-6    bar-1    C2    16

我试着把它变成这样

A        B        C1    C2
foo-1    bar-6    11    NAN
foo-2    bar-5    NAN   12
foo-3    bar-4    13    NAN
foo-4    bar-3    14    NAN
foo-5    bar-2    NAN   15
foo-6    bar-1    NAN   16

否则我就把D & E科

A        B        D    E    C1    C2
foo-1    bar-6    C1   11   11    NAN
foo-2    bar-5    C2   12   NAN   12
foo-3    bar-4    C1   13   13    NAN
foo-4    bar-3    C1   14   14    NAN
foo-5    bar-2    C2   15   NAN   15
foo-6    bar-1    C2   16   NAN   16

我试过这个

for row in dataframe.index:
dataframe\[dataframe\[D\]\] = dataframe\[E\]

但结果不对

6tqwzwtp

6tqwzwtp1#

尝试透视原始 Dataframe 的一部分,然后将其连接回来:

out = df.join(pd.pivot(df[['D', 'E']], columns='D', values='E'))
print(out)

图纸:

A      B   D   E    C1    C2
0  foo-1  bar-6  C1  11  11.0   NaN
1  foo-2  bar-5  C2  12   NaN  12.0
2  foo-3  bar-4  C1  13  13.0   NaN
3  foo-4  bar-3  C1  14  14.0   NaN
4  foo-5  bar-2  C2  15   NaN  15.0
5  foo-6  bar-1  C2  16   NaN  16.0
ctzwtxfj

ctzwtxfj2#

这个问题出现了很多,因为它是不明显的操作是什么。一个词是pivot table。它也是堆栈操作的反面。因此,您可以使用unstack,如@ScottBenson的答案或DataFrame.pivot方法。

df.pivot(index=['A', 'B'], columns='D', values='E')

输出量

D              C1    C2
A     B                
foo-1 bar-6  11.0   NaN
foo-2 bar-5   NaN  12.0
foo-3 bar-4  13.0   NaN
foo-4 bar-3  14.0   NaN
foo-5 bar-2   NaN  15.0
foo-6 bar-1   NaN  16.0
qvtsj1bj

qvtsj1bj3#

这里有一个相当简单的解决方案。让我知道如果你有任何问题(:

data = {
'A': ['foo-1', 'foo-2', 'foo-3', 'foo-4', 'foo-5', 'foo-6'],
'B': ['bar-6', 'bar-5', 'bar-4', 'bar-3', 'bar-2', 'bar-1'],
'D': ['C1', 'C2', 'C1', 'C1', 'C2', 'C2'],
'E': [11, 12, 13, 14, 15, 16]
}
df = pd.DataFrame(data)
column_index = [0,1,2,3,4,5]
for (a,b,c) in zip(df['D'], df['E'], column_index):
    if df['D'][c] == 'C1':
        df['E'][c] = 'NAN
        df['D'][c] = b
    else:
        df['E'][c] = b
        df['D'][c] = 'NAN
df.columns = ['A', 'B', 'C1', 'C2']
print(df)

| | 一个|B级|C1| C2|
| - -----|- -----|- -----|- -----|- -----|
| 0| foo-1|巴-6|十一|南|
| 1| foo-2|巴-5|南|十二岁|
| 2| foo-3|巴-4|十三个|南|
| 3| foo-4| bar-3|十四|南|
| 4| foo-5|巴-2|南|十五|
| 5个|foo-6| bar-1|南|十六|

相关问题