如何根据具有不同数据类型的两列中的条件创建新列?
How do I create a new column based on a condition out of two columns with different datatypes?
我目前正在处理一个如下所示的大数据集:
我遇到的问题是每天报告的案例分为 'Negative'、'Positive' 和 'Inconclusive' 个案例。我的目标是总结每天报告的案例数量,但同时我还想为每种案例创建单独的列(每天的负面案例一列,正面案例一列,另一列为不确定的)。
为了达到我的目标,我需要做的就是通过使用 overall_outcome 列和 new_results_reported 列创建条件来过滤数据集。
我在负面案例中尝试过:
america3 = pd.DataFrame(data, columns = ['overall_outcome', 'new_results_reported']) contain_values = america3[america3['overall_outcome'].str.contains('Negative')] contain_values.head(20)
我只是不知道我是否在这样做 correctly.If 我所做的有点正确然后我仍然无法弄清楚如何仅使用负数创建新列。如果它不正确,那么我不知道下一步该采取什么步骤。我想问题是 overall_outcome 是一个对象而 new_results_reported 是一个 int64.
我希望我说得有道理。
Panda 的groupby 功能就是你想要的,我想。创建一个仅包含所需列的新数据框,并按结果和日期汇总所有负面、正面或不确定案例的总数。请看这个玩具示例:
import pandas as pd
row1list = ['Negative', 100, '2020/03/01', 'abc']
row2list = ['Negative', 200, '2020/03/01', 'abc']
row3list = ['Negative', 110, '2020/03/02', 'abc']
row4list = ['Negative', 220, '2020/03/02', 'abc']
row5list = ['Inconclusive', 10, '2020/03/01', 'bcd']
row6list = ['Inconclusive', 20, '2020/03/01', 'bcd']
row7list = ['Positive', 3, '2020/03/01', 'tuv']
row8list = ['Positive', 5, '2020/03/01', 'tuv']
america3 = pd.DataFrame([row1list, row2list, row3list, row4list, row5list, row6list, row7list, row8list],
columns=['overall_outcome', 'new_results_reported', 'date', 'col_xyz'])
df_dailies = america3.groupby(['overall_outcome', 'date'], as_index=False).agg({
'new_results_reported': sum})
给你这个数据框
overall_outcome date new_results_reported
0 Inconclusive 2020/03/01 30
1 Negative 2020/03/01 300
2 Negative 2020/03/02 330
3 Positive 2020/03/01 8
我目前正在处理一个如下所示的大数据集:
我遇到的问题是每天报告的案例分为 'Negative'、'Positive' 和 'Inconclusive' 个案例。我的目标是总结每天报告的案例数量,但同时我还想为每种案例创建单独的列(每天的负面案例一列,正面案例一列,另一列为不确定的)。
为了达到我的目标,我需要做的就是通过使用 overall_outcome 列和 new_results_reported 列创建条件来过滤数据集。 我在负面案例中尝试过:
america3 = pd.DataFrame(data, columns = ['overall_outcome', 'new_results_reported']) contain_values = america3[america3['overall_outcome'].str.contains('Negative')] contain_values.head(20)
我只是不知道我是否在这样做 correctly.If 我所做的有点正确然后我仍然无法弄清楚如何仅使用负数创建新列。如果它不正确,那么我不知道下一步该采取什么步骤。我想问题是 overall_outcome 是一个对象而 new_results_reported 是一个 int64.
我希望我说得有道理。
Panda 的groupby 功能就是你想要的,我想。创建一个仅包含所需列的新数据框,并按结果和日期汇总所有负面、正面或不确定案例的总数。请看这个玩具示例:
import pandas as pd
row1list = ['Negative', 100, '2020/03/01', 'abc']
row2list = ['Negative', 200, '2020/03/01', 'abc']
row3list = ['Negative', 110, '2020/03/02', 'abc']
row4list = ['Negative', 220, '2020/03/02', 'abc']
row5list = ['Inconclusive', 10, '2020/03/01', 'bcd']
row6list = ['Inconclusive', 20, '2020/03/01', 'bcd']
row7list = ['Positive', 3, '2020/03/01', 'tuv']
row8list = ['Positive', 5, '2020/03/01', 'tuv']
america3 = pd.DataFrame([row1list, row2list, row3list, row4list, row5list, row6list, row7list, row8list],
columns=['overall_outcome', 'new_results_reported', 'date', 'col_xyz'])
df_dailies = america3.groupby(['overall_outcome', 'date'], as_index=False).agg({
'new_results_reported': sum})
给你这个数据框
overall_outcome date new_results_reported
0 Inconclusive 2020/03/01 30
1 Negative 2020/03/01 300
2 Negative 2020/03/02 330
3 Positive 2020/03/01 8