繁体   English   中英

在 python 中转换数据帧

[英]Transforming data frame in python

我有以下数据集的情况:

ID      A     B    C
1      aa     -    -
2      -      bb   -
3      -      -    cc
4      aaa    -    -

应将其转换为以下数据框:

ID    A
 1    aa
 2    bb
 3    cc
 4    aa

所以本质上是移动行,使其适合第一列

在将符号“-” replace为 nan 之后,您可以使用bfill和沿列的轴:

df_ = df.replace('-', np.nan).bfill(1)[['ID', 'A']]
print(df_)
  ID    A
0  1   aa
1  2   bb
2  3   cc
3  4  aaa

您可以使用df.replace-替换为 np.nan 并将'ID'设置为索引,然后将df.stackdf.droplevel

df.replace('-',np.nan).set_index('ID').stack().droplevel(1)

ID
1     aa
2     bb
3     cc
4    aaa
dtype: object
for i in range(len(df)):
    if df.at[i, 'A'] == '-':
        if df.at[i, 'B'] == '-':
            df.at[i, 'A'] = df.at[i, 'C']
        else:
            df.at[i, 'A'] = df.at[i, 'B']

df.drop(['B', 'C'], axis=1, inplace = True)

只需使用嵌套 if 语句来查找我们在其中包含-以外的其他内容的列,并将该值分配给列A中的值。

**Output** : df

    ID  A
0   1   aa
1   2   bb
2   3   cc
3   4   aaa

你可以试试这个:

df.replace('-', np.nan, inplace=True)
df['new'] = df[df.columns[1:]].apply(
    lambda x: ''.join(x.dropna().astype(str)),
    axis=1
)
df = df[['ID', 'new']]
print(df)

输出:

   ID  new
0   1   aa
1   2   bb
2   3   cc
3   4  aaa

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM