[英]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.stack
和df.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.