создавать столбцы на основе условий - PullRequest
0 голосов
/ 22 мая 2018

У меня есть фрейм данных, который содержит имена столбцов, как показано ниже

Набор данных 1:

df1_columns = [adult    adultold    old old1    old2    old3    old4    old6]

In dataframe2 i have columns subset of column 1, now I want to add columns which I have in dataframe 1.

Фрейм данных 2:

adult   adultold    old2    old5
0   0   1   0
1   0   0   0
1   0   0   0
0   0   0   0
1   0   0   0
1   0   0   0
0   0   0   1
0   0   0   0
0   0   0   0
0   0   0   0
0   0   0   0

Я хочу сделать что-то подобное на основеимена столбцов dataframe1 и добавить те же имена столбцов в набор данных 2 с нулями.

dataframe1.columns = [adult,    adultold,   old,    old1,   old2,   old3,   old4,   old6]

dataframe2.columns = [adult,    adultold,   old2    old5]

if x in dataframe1.columns:
     if y in dataframe2.columns:
           pass
     else:
           dataframe2['y'] = (fill with zeros)

output:

adult   adultold    old old1    old2    old3    old4    old6
0   0   1   0   0   0   0   0
1   0   0   0   0   0   0   0
1   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0
1   0   0   0   0   0   0   0
1   0   0   0   0   0   0   0
0   0   0   1   0   0   0   0
0   0   0   0   0   0   0   0

Можем ли мы получить новый кадр данных в порядке, как в df1?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Использование -

list_of_cols_not_in_df2 = df.columns.difference(df2.columns) # @jez thanks for teaching difference
pd.concat([df2, pd.DataFrame(0, df2.index, list_of_cols_not_in_df2 )], axis=1)

с использованием соединения вместо concat

df2.join(pd.DataFrame(0, df2.index, list_of_cols_not_in_df2 ))

Выход

    adult   adultold    old old1    old2    old3    old4    old6
0   0   0   1   0   0   0   0   0
1   1   0   0   0   0   0   0   0
2   1   0   0   0   0   0   0   0
3   0   0   0   0   0   0   0   0
4   1   0   0   0   0   0   0   0
5   1   0   0   0   0   0   0   0
6   0   0   0   1   0   0   0   0
7   0   0   0   0   0   0   0   0
8   0   0   0   0   0   0   0   0
9   0   0   0   0   0   0   0   0
10  0   0   0   0   0   0   0   0
0 голосов
/ 22 мая 2018

Вы можете использовать numpy.setdiff1d, если входными данными являются списки имен столбцов для Series и для имен новых столбцов assign:

s = pd.Series(0, index=np.setdiff1d(dataframe1_columns, dataframe2_columns))
print (s)
old2    0
old3    0
old4    0
old6    0
dtype: int64

df = dataframe2.assign(**s)
print (df)
    adult  adultold  old  old1  old2  old3  old4  old6
0       0         0    1     0     0     0     0     0
1       1         0    0     0     0     0     0     0
2       1         0    0     0     0     0     0     0
3       0         0    0     0     0     0     0     0
4       1         0    0     0     0     0     0     0
5       1         0    0     0     0     0     0     0
6       0         0    0     1     0     0     0     0
7       0         0    0     0     0     0     0     0
8       0         0    0     0     0     0     0     0
9       0         0    0     0     0     0     0     0
10      0         0    0     0     0     0     0     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...