根据条件用来自另一个数据框的列的值填充列

时间:2020-06-27 04:51:25

标签: python pandas numpy

我有一个看起来像这样的数据框(我的输入数据库涉及COVID情况)

数据:

Configuration.UnitOfWork.IsolationLevel = IsolationLevel.RepeatableRead;

值得注意的是,上述数据中的“日期”列是一个数字(不是日期时间)

我想使其成为这样的时间序列(期望的输出),以日期作为索引,每个州的COVID案例作为列

    date      state  cases
0   20200625  NY     300
1   20200625  CA     250
2   20200625  TX     200
3   20200625  FL     100
5   20200624  NY     290
6   20200624  CA     240
7   20200624  TX     100
8   20200624  FL     80
...

到目前为止,我设法使用以下代码创建了输出的骨架

          NY     CA     TX     FL
20200625  300    250    200    100
20200626  290    240    100    80
...

返回:

states = ['NY', 'CA', 'TX', 'FL']
days = [20200625, 20200626]

columns = states
positives = pd.DataFrame(columns = columns)

i = 0
for day in days:
   positives.loc[i, "date"] = day
   i = i +1

positives.set_index('date', inplace=True)
positives= positives.rename_axis(None)
print(positives)

在以下情况下,如何从“数据”数据框中获取“案例”列的值?

(i)data [“ state”]中的值=“正”的列标题,

(ii)data [“ date”]中的值=“正”的行索引

2 个答案:

答案 0 :(得分:4)

您可以这样做:

df = df.set_index(['date', 'state']).unstack().reset_index()

# fix column names
df.columns = df.columns.get_level_values(1)

state               CA     FL     NY     TX
0      20200624  240.0    NaN  290.0    NaN
1      20200625  250.0  100.0  300.0  200.0

稍后,要再次设置索引,我们需要显式设置名称,请执行以下操作:

df = df.set_index("")
df.index.name = "date"

答案 1 :(得分:2)

您感兴趣的转换称为枢轴。您可以在Pandas中实现以下目标:

{{1}}