英文:
To find a column name in a specific column and enter its number
问题
Python.
我将使用pandas。
从第1列中定位列名。
在输入列0中找到文本中的列名,并将其输入为数字。
import pandas as pd
data = [['EA', 0, 0, 0], ['col2,col2', 0, 0, 0], ['col3', 0, 0, 0]]
df_input = pd.DataFrame(data, columns=[0, 'EA', 'col2', 'col3'])
df_input
data = [['EA', 1, 0, 0], ['col2,col2', 0, 2, 0], ['col3', 0, 0, 1]]
df_output = pd.DataFrame(data, columns=[0, 'EA', 'col2', 'col3'])
df_output
英文:
Python.
I'm going to use a pandas
Locate the column name from column 1.
Locate the column name in the text entered in column 0 and enter the number as a number.
import pandas as pd
data = [['EA',0,0,0], ['col2,col2', 0, 0,0], ['col3', 0,0,0]]
df_input = pd.DataFrame(data, columns=[0, 'EA', 'col2', 'col3'])
df_input
data = [['EA',1,0,0], ['col2,col2', 0, 2,0], ['col3', 0,0,1]]
df_output = pd.DataFrame(data, columns=[0, 'EA', 'col2', 'col3'])
df_output
答案1
得分: 2
你可以使用 str.extractall
,然后使用 crosstab
进行操作:
s = (df_input[0]
.str.extractall('([^,]+)')[0]
.droplevel(-1)
)
# 在原地更新
df_input.update(pd.crosstab(s.index, s))
或者创建一个新的 DataFrame:
df_output = (pd.crosstab(s.index, s)
.combine_first(df_input)
.reindex_like(df_input)
)
输出如下:
0 EA col2 col3
0 EA 1 0 0
1 col2,col2 0 2 0
2 col3 0 0 1
如果 col2,col2
变成了 col2,col3
,输出如下:
0 EA col2 col3
0 EA 1 0 0
1 col2,col3 0 1 1
2 col3 0 0 1
英文:
You can use str.extractall
then a crosstab
:
s = (df_input[0]
.str.extractall('([^,]+)')[0]
.droplevel(-1)
)
# update in place
df_input.update(pd.crosstab(s.index, s))
Or for a new DataFrame:
df_output = (pd.crosstab(s.index, s)
.combine_first(df_input)
.reindex_like(df_input)
)
Output:
0 EA col2 col3
0 EA 1 0 0
1 col2,col2 0 2 0
2 col3 0 0 1
Output if col2,col2
was col2,col3
:
0 EA col2 col3
0 EA 1 0 0
1 col2,col3 0 1 1
2 col3 0 0 1
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论