在 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
所以本质上是移动行使其适合第一列
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
您可以在 replace
符号 '-' 之后使用 bfill
和沿列的轴 by nan:
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
我有以下数据集的情况:
ID A B C
1 aa - -
2 - bb -
3 - - cc
4 aaa - -
应转换为以下数据框:
ID A
1 aa
2 bb
3 cc
4 aa
所以本质上是移动行使其适合第一列
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
您可以在 replace
符号 '-' 之后使用 bfill
和沿列的轴 by nan:
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